有没有办法在运行时识别从 valgrind 中运行的可执行文件?我有一组 C++ 单元测试,其中一个预计std::vector::reserve
会抛出std::bad_alloc
. 当我在 valgrind 下运行它时,它完全退出,阻止我测试内存泄漏(使用 valgrind)和行为(期望抛出异常)。
这是一个重现它的最小示例:
#include <vector>
int main()
{
size_t uint_max = static_cast<size_t>(-1);
std::vector<char> 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<char, std::allocator<char> >::reserve(unsigned) new_allocator.h:92)
by 0x804874D: main (vg.cxx:6)
我想修改我的单元测试,以便在从 valgrind 中运行时跳过有问题的代码。这可能吗?