Ответ 1
Вы должны прервать процесс, связанный с gdb. Не прерывайте сам gdb. Прерывание процесса с помощью ctrl-c в терминале в который был запущен или отправлен процесс SIGINT убить -2 procid. С procid идентификатор процесса присоединения.
Я в основном использую GDB в первый раз. Я запустил
$ gdb
тогда я запускаю
attach <mypid>
то я вижу, что мой процесс застрял (что, вероятно, хорошо). Теперь я хочу, чтобы он продолжал работать, поэтому я запускаю
continue
и мой процесс продолжается но отсюда я застрял, если хочу снова посмотреть мою текущую трассировку стека и т.д. Я не мог уйти от продолжения... Я пробовал Ctrl - D и т.д., но ничего не работало для меня... ( было просто предположением).
Вы должны прервать процесс, связанный с gdb. Не прерывайте сам gdb. Прерывание процесса с помощью ctrl-c в терминале в который был запущен или отправлен процесс SIGINT убить -2 procid. С procid идентификатор процесса присоединения.
Control + C в процессе gdb вернет вас в командную строку.
Здесь короткий учебник GDB, и здесь полный GDB руководство.
Точкой отладки является проверка интересных/подозрительных частей программы. Точки останова позволяют остановить выполнение в каком-то месте источника и watchpoints позволяют останавливаться при изменении интересных данных.
Простые примеры:
(gdb) break my_function
(gdb) cont
Вставить точку останова в начале my_function
, поэтому, когда выполнение программы входит в функцию, программа будет приостановлена, и вы получите ответ GDB назад и сможете проверить состояние программы. Или вы можете step через код.
(gdb) watch my_var
(gdb) cont
То же самое, но теперь программа будет остановлена в любом месте, которое изменит значение my_var
.
Бесстыдный плагин - здесь ссылка на мой презентация GDB на NYC BSD User Group. Надеюсь, это поможет.