Обратная трассировка SIGSEGV с libc повторяет записи

Я использовал libunwind до перехода к доступной трассировке execinfo. После внедрения новой обратной трассировки мне это нравилось, пока я не удалил libunwind из проекта и не сделал полную перестройку.

Теперь моя функция обратной трассировки отказывается давать нормальный результат от SIGSEGV (я знаю, что делать обратную трассировку оттуда небезопасно), но почему раньше она работала нормально?

Я опубликую вывод на данный момент с неправильными результатами. Первая обратная трассировка является исключением, вторая — преднамеренным SIGSEGV — ожидаемым результатом будет трассировка до __libc_start_main.

Я помню, что читал что-то о стеке сигналов как о проблеме?

ERROR: FatalException detected: Unable to find string Id STR_PATIENT_LIST in configuration xml file at gui.cpp +1224
===========================================
FATAL STACK BACKTRACE
[bt]: (1 ) [0x1aed350]
[bt]: (2 ) ./ambusergm(getStrIdElement(char const*)+0x1a4) [0xa3d6c]
[bt]: (3 ) ./ambusergm(getCurrentLanguageStr(char const*)+0x18) [0xa4968]
[bt]: (4 ) ./ambusergm(createDialogs+0x70) [0xa4ce4]
[bt]: (5 ) ./ambusergm(handleMenuUniqueIdEvent+0x1278) [0x90030]
[bt]: (6 ) ./ambusergm(menuSelectionInvoke(int, int)+0x278) [0xa14ac]
[bt]: (7 ) ./ambusergm(reloadMenu+0xe0) [0xab51c]
[bt]: (8 ) ./ambusergm(main+0x638) [0x600b0]
[bt]: (9 ) /lib/libc.so.6(__libc_start_main+0x120) [0x402f7fd4]
===========================================

signal 11 (Segmentation fault), address is (nil) from 0x166398
===========================================
CRASH STACK BACKTRACE
[bt]: (1 ) ./ambusergm(MessageBoxDlg::Setup(MessageBoxType, int, int, int, int, wchar_t const*, wchar_t const*)+0x10) [0x166398]
[bt]: (2 ) /lib/libc.so.6(__default_rt_sa_restorer_v2+0) [0x4030e630]
[bt]: (3 ) ./ambusergm(MessageBoxDlg::Setup(MessageBoxType, int, int, int, int, wchar_t const*, wchar_t const*)+0x10) [0x166398]

... repeated to the last entry

[bt]: (49) ./ambusergm(MessageBoxDlg::Setup(MessageBoxType, int, int, int, int, wchar_t const*, wchar_t const*)+0x10) [0x166398]
===========================================

person Ulterior    schedule 18.05.2012    source источник


Ответы (1)


Проблема заключалась в том, что сегмент приложения выдал ошибку в самом обработчике исключений и рекурсивно вызвал обработчик сигнала segfault.

person Ulterior    schedule 18.05.2012