Как стать автором
Обновить

Комментарии 11

Может посоветуете по такому вопросу… Пытаюсь отладить некоторую программу, запускаю ее по команде run. Она стартует и потом выскакивает segfault.
Казалось бы я могу посмотреть backtrace и понять в какой функции произошло и посмотреть весь стек вызовов. Однако происходит что-то странное — в стеке вызовов например одна функция memcpy() откуда вызвана не понятно, предыдущих функций в списке нет.
Или бывает другое — показана функция в которой сегфаулт, но она по идее вообще никогда не должна вызываться. Такое впечатление, что программа просто улетает неизвестно куда…

Один случай я таки смог понять и отловить. Очень странное дело. Обнаружил, что если есть C функция объявленная как int func(), но программист не делает return result (не возвращает никакого значения), то такой код может оказывается валить программу, происходит переход по случайному адресу. Это происходит иногда при компиляции с gcc8.

Думаю в моем случае еще что-то такое происходит… но как найти с помощью gdb?
Когда случается segfault, то уже видимо поздно.
Отлаживать от старта программы по шагам вряд ли получится, так как там в программе много асинхронных потоков.

По описанию похоже на битый стек.
Я бы посоветовал погонять с ASAN/MSAN/TSAN, а если только в gdb — то, возможно, record и обратное исполнение что-нибудь покажут. Ну или руками попытаться раскрутить стек, глядишь, что получится.

Выглядит как оптимизированный бинарник, нужно компилировать с -O0.

НЛО прилетело и опубликовало эту надпись здесь
Флаг -g используется.
НЛО прилетело и опубликовало эту надпись здесь

Обычно в -dev пакеты кладут заголовки, отладочные символы отдельно пакуются в -dbg.

1) "-g" не отменяет оптимизацию, нужно чтобы явно был выставлен уровень -O0.


2) Отладочные символы для сторонних библиотек ставятся в пакетах -dbg. Для Ubuntu и Debian эти пакеты лежат в отдельных репозиториях, которые нужно подключать.

НЛО прилетело и опубликовало эту надпись здесь

Отладку проводить можно, и строки будут скакать, и еще половина переменных будет показываться как "".  @Slekdzhov, если все это есть, то дело точно в оптимизации.

НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации