当前位置:  开发笔记 > 编程语言 > 正文

如何检测程序是否在valgrind中运行?

如何解决《如何检测程序是否在valgrind中运行?》经验,为你挑选了1个好方法。

有没有办法在运行时识别可执行文件正在valgrind中运行?我有一组C++单元测试,其中一个期望std::vector::reserve抛出std::bad_alloc.当我在valgrind下运行它时,它完全挽救,阻止我测试内存泄漏(使用valgrind)和行为(期望抛出异常).

这是一个重现它的最小例子:

#include 
int main()
{
    size_t uint_max = static_cast(-1);
    std::vector v;
    v.reserve(uint_max);
}

运行valgrind,我得到这个输出:

Warning: silly arg (-1) to __builtin_new()
new/new[] failed and should throw an exception, but Valgrind
   cannot throw exceptions and so is aborting instead.  Sorry.
   at 0x40192BC: VALGRIND_PRINTF_BACKTRACE (valgrind.h:319)
   by 0x401C823: operator new(unsigned) (vg_replace_malloc.c:164)
   by 0x80487BF: std::vector >::reserve(unsigned) new_allocator.h:92)
   by 0x804874D: main (vg.cxx:6)

我想修改我的单元测试,以便在从valgrind中运行时简单地跳过有问题的代码.这可能吗?



1> Hasturkun..:

您应该从Valgrind手册中查看此页面,它包含一个RUNNING_ON_VALGRIND宏(包含在valgrind.h中),可以满足您的需要.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有