Как войти, перейти и выйти с GDB?

42

Я печатал, helpпока был в GDB, но ничего не нашел о переходе, переходе и выходе. Я поставил точку останова в программе сборки в _start( break _start). После этого я набрал текст, nextи он закончил отладку. Я предполагаю, что это было, потому что это закончилось _startи не вступило в действие, как я хотел.

Кто-нибудь, кто может помочь?

Пичи Уана
источник
Прочитайте полные документы GDB. Насколько я помню, они мне очень помогли, когда я впервые узнал об этом. К сожалению, мне не нужно было отлаживать какие-либо программы на этом уровне в течение нескольких десятилетий, поэтому реальные команды, похоже, оказались в моем мозгу. Поэтому я не могу написать ответ. Но, если вы поймете это из руководств, то вы можете ответить на свой вопрос за бонус.
КАРТА
@MAP я попробую еще раз. Я пытался использовать лучший отладчик (KDbg), но мне не удалось использовать его в Ubuntu .
Пичи Уана

Ответы:

38

help running предоставляет некоторые советы:

Есть stepи nextинструкции (а также nextiи stepi).

(gdb) help next
Step program, proceeding through subroutine calls.
Usage: next [N]
Unlike "step", if the current source line calls a subroutine,
this command does not enter the subroutine, but instead steps over
the call, in effect treating it as a single source line.

Таким образом , мы можем видеть , что stepшаги Into подпрограмм, но nextшагнет через подпрограмму.

stepИ stepi(и , nextи nexti) являются отличительными от «линии» или «инструкции» шагом.

step -- Step program until it reaches a different source line
stepi -- Step one instruction exactly

Связано это finish:

(gdb) help finish
Execute until selected stack frame returns.
Usage: finish
Upon return, the value returned is printed and put in the value history.

Гораздо больше полезной информации можно найти по адресу https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html.

Стивен Харрис
источник
Что это значит, пока не достигнет другой строки источника ?
Пичи Уана
1
for(i=0;i<10;i++) { printf("%d\n",i); }одна строка источника, но несколько инструкций.
Стивен Харрис
3
Есть ли способ выйти? Я не мог найти это в помощи бегу.
nukeguy
1
Что вы имеете в виду под "выходом"? Команда finishзавершит текущий кадр стека, который обычно завершит текущую подпрограмму и вернется к вызывающей стороне.
Стивен Харрис
@PichiWuana gdb будет выполнять столько инструкций по сборке, сколько необходимо, пока не будет достигнута первая инструкция, представляющая следующую строку исходного кода
U007D
0

Я пришел сюда, потому что у меня был тот же вопрос. В конце концов я понял, что для своих целей в любое время я могу использовать что-то вроде «выхода из цикла», я могу просто установить другую continueточку останова после цикла, а затем позволить программе завершить цикл и затем запустить точку останова. Извините, если это очевидно для большинства людей, но, вероятно, это полезно для тех, кто ищет ответ на этот вопрос.

fjahr
источник