Если конструктор выходит из строя при вызове std::make_shared, может ли gdb показать подробности сбоя ⇐ C++
-
Anonymous
Если конструктор выходит из строя при вызове std::make_shared, может ли gdb показать подробности сбоя
В приведенном ниже коде я вызываю make_shared, и конструктор MyClass выдает исключение. Если файл ядра доступен, можно ли выяснить причину сбоя [например: произошел ли сбой из-за foo() или fun()] с помощью GDB?
#include #include использование пространства имен std; класс МойКласс { публика: Мои занятия() { Фу(); веселье(); } ~МойКласс() { } недействительный Фу() { бросок("ошибка 1"); } пустота веселья() { бросить("ошибка 2"); } }; shared_ptr createMyClass() { вернуть make_shared(); } интервал основной() { shared_ptr c = createMyClass(); вернуть 0; } backtrace просто указывает на эту строку:
29 return make_shared(); обратная трассировка:
Программа получила сигнал SIGABRT, прервана. 0x00007ffff722d5f7 в Raise() из /lib64/libc.so.6 Отсутствует отдельная информация об отладке, используйте: debuginfo-install glibc-2.17-106.el7_2.6.x86_64 libgcc-4.8.5-4.el7.x86_64 libstdc++-4.8.5-4.el7.x86_64 (гдб) BT #0 0x00007ffff722d5f7 в raise() из /lib64/libc.so.6 #1 0x00007ffff722ece8 при прерывании () из /lib64/libc.so.6 #2 0x00007ffff7b329d5 в __gnu_cxx::__verbose_terminate_handler() () из /lib64/libstdc++.so.6 #3 0x00007ffff7b30946 в ?? () из /lib64/libstdc++.so.6 #4 0x00007ffff7b30973 в std::terminate() () из /lib64/libstdc++.so.6 #5 0x00007ffff7b30be9 в __cxa_rethrow() из /lib64/libstdc++.so.6 #6 0x000000000040121e в std::__shared_count::__shared_count(std::_Sp_make_shared_tag, MyClass*, std::allocator const&) ( this=0x7fffffffe178, __a=...) в /usr/include/c++/4.8.2/bits/shared_ptr_base.h:509 #7 0x00000000004010ba в std::__shared_ptr::__shared_ptr(std::_Sp_make_shared_tag, std::allocator const&) (this=0x7fffffffe170 , __tag=..., __a=...) в /usr/include/c++/4.8.2/bits/shared_ptr_base.h:957 #8 0x0000000000401052 в std::shared_ptr::shared_ptr(std::_Sp_make_shared_tag, std::allocator const&) (this=0x7fffffffe170, __tag=..., __a=...) в /usr/include/c++/4.8.2/bits/shared_ptr.h:316 #9 0x0000000000400f98 в std::allocate_shared(std::allocator const&) (__a=...) в /usr/include/c++/4.8.2/bits/ общий_ptr.h:598 #10 0x0000000000400ee0 в std::make_shared () в /usr/include/c++/4.8.2/bits/shared_ptr.h:614 #11 0x0000000000400ce3 в createMyClass() в abrt.cpp:29 #12 0x0000000000400cfe в main() в abrt.cpp:34 (gdb) q
В приведенном ниже коде я вызываю make_shared, и конструктор MyClass выдает исключение. Если файл ядра доступен, можно ли выяснить причину сбоя [например: произошел ли сбой из-за foo() или fun()] с помощью GDB?
#include #include использование пространства имен std; класс МойКласс { публика: Мои занятия() { Фу(); веселье(); } ~МойКласс() { } недействительный Фу() { бросок("ошибка 1"); } пустота веселья() { бросить("ошибка 2"); } }; shared_ptr createMyClass() { вернуть make_shared(); } интервал основной() { shared_ptr c = createMyClass(); вернуть 0; } backtrace просто указывает на эту строку:
29 return make_shared(); обратная трассировка:
Программа получила сигнал SIGABRT, прервана. 0x00007ffff722d5f7 в Raise() из /lib64/libc.so.6 Отсутствует отдельная информация об отладке, используйте: debuginfo-install glibc-2.17-106.el7_2.6.x86_64 libgcc-4.8.5-4.el7.x86_64 libstdc++-4.8.5-4.el7.x86_64 (гдб) BT #0 0x00007ffff722d5f7 в raise() из /lib64/libc.so.6 #1 0x00007ffff722ece8 при прерывании () из /lib64/libc.so.6 #2 0x00007ffff7b329d5 в __gnu_cxx::__verbose_terminate_handler() () из /lib64/libstdc++.so.6 #3 0x00007ffff7b30946 в ?? () из /lib64/libstdc++.so.6 #4 0x00007ffff7b30973 в std::terminate() () из /lib64/libstdc++.so.6 #5 0x00007ffff7b30be9 в __cxa_rethrow() из /lib64/libstdc++.so.6 #6 0x000000000040121e в std::__shared_count::__shared_count(std::_Sp_make_shared_tag, MyClass*, std::allocator const&) ( this=0x7fffffffe178, __a=...) в /usr/include/c++/4.8.2/bits/shared_ptr_base.h:509 #7 0x00000000004010ba в std::__shared_ptr::__shared_ptr(std::_Sp_make_shared_tag, std::allocator const&) (this=0x7fffffffe170 , __tag=..., __a=...) в /usr/include/c++/4.8.2/bits/shared_ptr_base.h:957 #8 0x0000000000401052 в std::shared_ptr::shared_ptr(std::_Sp_make_shared_tag, std::allocator const&) (this=0x7fffffffe170, __tag=..., __a=...) в /usr/include/c++/4.8.2/bits/shared_ptr.h:316 #9 0x0000000000400f98 в std::allocate_shared(std::allocator const&) (__a=...) в /usr/include/c++/4.8.2/bits/ общий_ptr.h:598 #10 0x0000000000400ee0 в std::make_shared () в /usr/include/c++/4.8.2/bits/shared_ptr.h:614 #11 0x0000000000400ce3 в createMyClass() в abrt.cpp:29 #12 0x0000000000400cfe в main() в abrt.cpp:34 (gdb) q
Мобильная версия