Отладка ошибки сегментации, когда я делаю ctrl c - PullRequest
22 голосов
/ 16 февраля 2009

Я получаю ошибку сегментации, когда отменяю свою программу. Я использую GDB для отладки, проблема в том, что когда я нажимаю Ctrl-C во время отладки, GDB не отменяет программу и делает то, что она должна делать, это останавливать ее.

Я хочу сделать Ctrl-C и не дать GDB остановить его. Есть какой-либо способ сделать это? Любые другие рекомендации по отладке? Я не могу использовать printf, потому что искренне не знаю, откуда возникла проблема.

Ответы [ 4 ]

31 голосов
/ 16 февраля 2009

GDB перехватывает сигнал. Когда вы нажимаете CTRL-C, вы фактически заставляете драйвер терминала генерировать SIGINT.

Вам нужно, чтобы GDB генерировал SIGINT с помощью команды signal . синтаксис

сигнал число

и сигнал человека сообщит вам номер сигнала (в данном случае SIGINT - это сигнал 2, поэтому signal 2 сделает это).

Обновление

Конечно, вы можете использовать символическое имя. info signal скажет вам все имена и т.д.

Да, кстати, есть вероятность, что у вас установлен обработчик сигнала для SIGINT, и аргументы как-то не верны.

21 голосов
/ 16 февраля 2009

Другой вариант - остановить GDB от перехвата SIGINT, набрав handle SIGINT noprint pass в приглашении GDB перед запуском программы.

7 голосов
/ 16 февраля 2009

Один из вариантов - загрузить файл ядра, созданный, когда он не запущен в отладчике, в gdb. В GDB введите core-file [filename].

3 голосов
/ 26 марта 2009

Вы также можете отправить CTRL-C (он же SIGINT) с другого терминала: kill -INT

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