Есть ли способ идентифицировать во время выполнения исполняемого файла изнутри 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. Это возможно?