Как остановить выполнение GDB без точки останова?
Как остановить выполнение в GDB без точки останова?
Ответ 1
Просто используйте регулярное прерывание Ctrl - c будет работать нормально. GDB просто перенаправляет SIGINT
в процесс отладки, который затем умирает. GDB поймает нестандартный выход и нарушит процесс там, поэтому вы все равно сможете изучить все потоки, их стеки и текущие значения переменных. Это отлично работает, хотя вам лучше использовать точки останова. Единственный раз, когда я нахожу, что я это делаю, если я думаю, что попал в какой-то бесконечный цикл.
Ответ 2
Приложения GUI не реагируют на ^ C и ^ Разрыв способа использования консольных приложений. С тех пор большинство нетривиальных проектов, как правило, представляют собой графические приложения или библиотеки, которые в основном используются в графических приложениях, у вас есть два варианта:
-
Отправить SIGSTOP в приложение с отдельного терминала. Это громоздко.
-
Если вы нажмете ^ C или ^ Перерыв в приглашении GDB, GDB завершится, но приложение останется включенным. Затем вы можете снова запустить GDB, чтобы подключиться к нему, используя переключатель командной строки
-p
. Это теряет состояние отладчика.
В обоих случаях вы можете найти это полезным: tasklist | grep
ProcessName
| sed -e 's/
ProcessName
*\([0-9]*\).*/gdb
ModuleName
-pid=\1/' > rungdb.sh
Вы можете изменить это для использования в сценариях оболочки, make файлах или отправить сигнал вместо присоединения GDB.
info threads
поможет вам выяснить, какой поток вы хотите посмотреть. Затем используйте thread
ThreadNumber
, чтобы переключиться на него.
Ответ 3
Запустите оболочку, найдите идентификатор процесса с помощью ps и отправьте его SIGSTOP или SIGINT с помощью команды kill (например, kill -INT pid).
Ответ 4
Просто введите BREAK без каких-либо аргументов.
Разрыв при вызове без каких-либо аргументов прерывает набор точек останова при следующей команде, которая должна выполняться в выбранном фрейме стека
Ответ 5
Ctrl + Z, кажется, работает для меня (но только в некоторых случаях - я не уверен, почему).