Gtkmm-3.0 Ошибка сегментации в g_sequence_iter_get_sequence и g_sequence_iter_is_end() с поврежденной обратной трассировC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Gtkmm-3.0 Ошибка сегментации в g_sequence_iter_get_sequence и g_sequence_iter_is_end() с поврежденной обратной трассиров

Сообщение Anonymous »

Я разрабатываю приложение на C++, используя gtkmm-3.0 на

Код: Выделить всё

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"
Мое приложение аварийно завершает работу из-за ошибки сегментацииt, и я пытаюсь найти источник, поскольку стек в GDB выглядит поврежденным.
Сбой:

Когда происходит сбой, 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, или это проблема исключительно отсутствия символа отладки?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»