Как остановить выполнение в GDB без точки останова? - PullRequest
29 голосов
/ 07 января 2009

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

Ответы [ 5 ]

22 голосов
/ 07 января 2009

Просто используйте обычное прерывание Ctrl - c будет работать просто отлично. GDB просто перенаправляет SIGINT в процесс отладки, который затем умирает. GDB поймает нестандартный выход и прервет там процесс, так что вы все равно сможете проверить все потоки, их стеки и текущие значения переменных. Это прекрасно работает, хотя вам лучше использовать точки останова. Единственный раз, когда я обнаруживаю, что делаю это, я думаю, что попал в какой-то бесконечный цикл.

12 голосов
/ 27 июня 2011

GUI-приложения не реагируют на ^ C и ^ нарушают работу консольных приложений. Поскольку в наши дни большинство нетривиальных проектов, как правило, являются приложениями или библиотеками с графическим интерфейсом, в основном используемыми в приложениях с графическим интерфейсом, у вас есть два варианта:

  1. Отправка SIGSTOP в приложение с отдельного терминала. Это громоздко.

  2. Если вы нажмете ^ C или ^ Break в командной строке GDB, GDB прекратит работу, но приложение продолжит работу. Затем вы можете снова запустить GDB для подключения к нему, используя ключ командной строки -p. Это теряет состояние отладчика.

В обоих случаях вам может пригодиться: tasklist | grepProcessName| sed -e 's/ProcessName*\([0-9]*\).*/gdbModuleName-pid=\1/' > rungdb.sh Вы можете изменить это для использования в скриптах оболочки, make-файлах или для отправки сигнала вместо присоединения GDB.

info threads поможет вам понять, на какую нить вы хотите посмотреть. Затем используйте threadThreadNumber, чтобы переключиться на него.

7 голосов
/ 07 января 2009

Запустите оболочку, найдите идентификатор процесса с помощью ps и отправьте SIGSTOP или SIGINT с помощью команды kill (например, kill -INT pid).

6 голосов
/ 07 января 2009

Просто введите BREAK без аргументов.

Break, когда вызывается без каких-либо аргументов, break устанавливает точку останова для следующей инструкции, которая будет выполнена в выбранном кадре стека

2 голосов
/ 12 мая 2018

Ctrl + Z, кажется, работает для меня (но только в некоторых случаях - я не уверен почему).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...