Bir yürütülebilir dosyanın çalışma zamanında tanımlanmasının bir yolu var mı? C++ birim testlerinden oluşan bir setim var ve bunlardan biri std::bad_alloc
'u atmak için std::vector::reserve
bekliyor. Bunu valgrind altında çalıştırdığımda, tümüyle bellek sızıntılarını (valgrind kullanarak) ve davranışları (atılacak istisnayı bekleyerek) test etmemi engelleyen tamamen boşaldı.Bir programın valgrind içinden çalışıp çalışmadığını nasıl algılayabilirim?
Burada çoğalır minimal örnek:
#include <vector>
int main()
{
size_t uint_max = static_cast<size_t>(-1);
std::vector<char> v;
v.reserve(uint_max);
}
valgrind Koşu, bu çıktıyı almak:
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)
Sadece zaman teşkil eden kod atlamak için benim birim sınama değiştirmek istediğiniz
valgrind içinden koşuyor. Mümkün mü?
Bunun için teşekkürler * yıllarca grind kullanıyorum ama arayüze çok fazla dokunmadım. Valm/valgrind.h mevcut ise valgind altında çalışırken hata ayıklama printfs() ve onayları otomatik olarak açar autoconf .. bu makro dahil etmek için kolaylık sağlamak için kolay Tekrar teşekkürler! Çok yararlı –