valgrind 内から実行されている実行可能ファイルを実行時に識別する方法はありますか? C++ 単体テストのセットがあり、そのうちの 1std::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 内から実行されているときに、問題のあるコードを単純にスキップするように単体テストを変更したいと思います。これは可能ですか?