Подтвердить что ты не робот

Как остановить выполнение в GDB без точки останова?

Как остановить выполнение GDB без точки останова?

4b9b3361

Ответ 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, кажется, работает для меня (но только в некоторых случаях - я не уверен, почему).