Помощь для журнала отладки gdb - PullRequest
1 голос
/ 01 декабря 2010

Я отлаживал в GDB (код C).Проблема в том, что если я запускаю свое приложение и в случае его сбоя элемент управления возвращается к main () (приложение перезапускается).Следовательно не будет понятия, где он разбился.Поэтому я трачу много времени на пошаговое выполнение каждой функции.

Я хотел бы знать, есть ли в любом случае журнал, который может генерировать последнюю строку выполнения перед сбоем.Это только мое предположение, если есть какой-то более простой способ сделать это, пожалуйста, дайте мне знать, это сэкономит мне много времени!

Также, если GDB генерирует журнал, где будет путь?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 01 декабря 2010

Этот вопрос для меня немного неясен, но я возьму удар:

Если у вас есть GDB, подключенный к процессу сбоя, когда он падает, сбой должен остановитьзапрограммируйте и верните вас обратно на приглашение (gdb).Если вы затем наберете bt, вы должны увидеть стек.

Если у вас НЕ подключен GDB, , тогда этот ответ на связанный вопрос может помочь.(Короче говоря, может быть, вы хотите, чтобы система создала дамп ядра при сбое программы. Дамп ядра - это просто файл, который содержит много информации о сбойном процессе. Вы можете использовать GDB с дампом ядра для просмотра стека.)

Если вы не знаете, опубликуйте то, что вы видите на экране, когда это произойдет, и мы догадаемся.

В любом случае программа определенноне должен начинаться сначала с main ().Кажется, стоит выяснить, почему это происходит и что именно происходит.Действительно ли управление переходит к main в том же процессе , в отличие от другого процесса, который каким-то образом запускается автоматически?

0 голосов
/ 12 апреля 2017

Запустите вашу программу в режиме GDB.

 $ gdb ./myProgram


Установить точку останова в ожидаемом месте.

 $ break functionName


Или установить точку останова для определенного номера строки.

 $ break 15


Начало исполнения

 $ r


Вступить или выйти из исполнения с помощью 's' или 'n'

 $ s


после сбоя программы выполните 'bt' для возврата.

 $ bt


Вы можете перемещаться вверх и вниз по трассе с помощью «вверх» и «вниз» команда

 $ up


Может также принимать альтернативный способ. Отладка программы с «core» в качестве файла дампа ядра.

 $ gdb executableFilename core
 $ bt
...