Завершить с исключением bad_alloc, но без «нового» в трассировке стека - PullRequest
0 голосов
/ 24 августа 2011

C ++ программа генерирует это:

завершается вызовом после выброса экземпляра 'St9bad_alloc' what (): std :: bad_alloc

Который, по-видимому, выбрасывается из нового, нотрассировка стека не показывает никаких вызовов новым:

#0  0x0000003174a330c5 in raise () from /lib64/libc.so.6
#1  0x0000003174a34a76 in abort () from /lib64/libc.so.6
#2  0x00007f93b1b7b0b4 in __gnu_cxx::__verbose_terminate_handler ()
at ../../../../gcc-4.3.4/libstdc++-v3/libsupc++/vterminate.cc:98
#3  0x00007f93b1b794f6 in __cxxabiv1::__terminate (handler=0x522b)
at ../../../../gcc-4.3.4/libstdc++-v3/libsupc++/eh_terminate.cc:43
#4  0x00007f93b1b79523 in std::terminate ()
at ../../../../gcc-4.3.4/libstdc++-v3/libsupc++/eh_terminate.cc:53
#5  0x00007f93b1b79536 in __cxxabiv1::__unexpected (handler=0x522b)
at ../../../../gcc-4.3.4/libstdc++-v3/libsupc++/eh_terminate.cc:59
#6  0x00007f93b1b78ec8 in __cxxabiv1::__cxa_call_unexpected (exc_obj_in=0x7f93b1dae770)
at ../../../../gcc-4.3.4/libstdc++-v3/libsupc++/eh_personality.cc:750
#7  0x00007f93b2c356e0 in network::HttpLoader::doLoad (this=0x7f938801ef20) at loaders/HttpLoader.cxx:1071
#8  0x00007f93b2c70971 in network::Loader::load (this=0x522b) at Loader.cxx:899
#9  0x00007f93b2c74a15 in network::Loader::load2 (this=0x522b) at Loader.cxx:925
#10 0x00007f93b2c7b13a in network::LoaderThread::run() ()
#11 0x00007f93b1e60be4 in threads::Thread_startWorker (thr=0x7f938801e460) at Threads.cxx:479
#12 0x00007f93b1e60ead in threads::ThreadPool::run (this=0x1140478, thr=0x7f938801eeb0) at Threads.cxx:727
#13 0x00007f93b1e608e8 in threads::__Thread_startWorker (param=<value optimized out>) at Threads.cxx:520
#14 0x0000003175206ccb in start_thread () from /lib64/libpthread.so.0
#15 0x0000003174ae0c2d in clone () from /lib64/libc.so.6

Добавлены операторы отладки в начале doLoad (), но она никогда не достигает этой точки.

В тупик!

Есть мысли?

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

Возможно, вызов new не находится в стеке, поскольку он уже размотан в момент завершения приложения.Я бы попытался установить точку останова в тот момент, когда исключение будет брошено (например, с использованием catch throw в gdb) - в этот момент вы увидите причину исключения в стеке.

0 голосов
/ 24 августа 2011

Maby вызов new был встроен из-за оптимизации.Попробуйте отключить оптимизации, хотя бы в loaders/HttpLoader.cxx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...