Код: Выделить всё
root@colibri-imx6ull-15625953:~# cat /etc/os-release
ID=tdx-x11
NAME="TDX X11"
VERSION="5.7.1-devel-20221213120311+build.0 (dunfell)"
VERSION_ID=5.7.1-devel-20221213120311-build.0
PRETTY_NAME="TDX X11 5.7.1-devel-20221213120311+build.0 (dunfell)"
DISTRO_CODENAME="dunfell"
Сбой:
Когда происходит сбой, GDB показывает следующее:
Код: Выделить всё
"nextGEN" received signal SIGSEGV, Segmentation fault.
0x769c5dac in g_sequence_iter_get_sequence () from /usr/lib/libglib-2.0.so.0
(gdb) bt
#0 0x769c5dac in g_sequence_iter_get_sequence () from /usr/lib/libglib-2.0.so.0
#1 0x7610d254 in ?? () from /usr/lib/libgtk-3.so.0
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Код: Выделить всё
Language: C++
Library: gtkmm-3.0 / glibmm-2.4
Compiler Flags: -g3 -O0 (Optimization disabled for debugging)
- Полная обратная трассировка: я запустил поток, применяющий все bt, но все потоки (включая те, которые используют liblog4cplus и опрос) показывают «поврежденный стек» или останавливаются на ?? в системных библиотеках.
- Отладка Флаги: Я подтвердил, что приложение скомпилировано с использованием -g3, но поскольку сбой происходит внутри libglib, обратная трассировка не указывает на мой исходный код.
Поскольку обратная трассировка остановлена из-за «поврежденного стека», я не могу увидеть, какая часть моего кода C++ передает недопустимый итератор или последовательность в GLib.
- Как я могу отладить ошибку «поврежденного стека» в GDB, когда ошибка сегментации происходит внутри g_sequence_iter_get_sequence? Я скомпилирован с -Уровнем отладки (Максимум -g3) и уровнем оптимизации (Нет -O0), но обратная трассировка останавливается на ?? в libgtk-3.so. Мне нужно увидеть вызывающего абонента в моем собственном коде. Существуют ли специальные команды GDB для ручного восстановления кадров стека во встроенной системе ARM, или это проблема исключительно отсутствия символа отладки?
Мобильная версия