Отладка ошибки сегментации, когда я делаю ctrl c
Я получаю ошибку сегментации, когда я отменяю свою программу. Я использую gdb для отладки, проблема в том, что когда я нажимаю Ctrl-C, пока я отлаживаю, gdb не отменяет программу и делает то, что она должна делать, это останавливает ее.
Я хочу сделать Ctrl-C и не позволять gdb его остановить. Есть какой-либо способ сделать это? Любые другие рекомендации по отладке? Я не могу использовать printf, потому что я искренне не знаю, откуда эта проблема.
Ответы
Ответ 1
gdb перехватывает сигнал. Когда вы нажимаете CTRL-C, вы фактически вызываете драйвер терминала для генерации SIGINT.
Что вам нужно сделать, так это то, что GDB генерирует SIGINT с помощью команды signal. синтаксис
сигнал num
и человеческий сигнал укажет вам номер сигнала (в этом случае SIGINT - это сигнал 2, поэтому signal 2
сделает это.)
Update
Конечно, вы можете использовать символическое имя. info signal
расскажет вам все имена и т.д.
О, кстати, есть вероятность, что у вас есть обработчик сигналов для SIGINT, и аргументы не так как-то.
Ответ 2
Альтернативой является остановка gdb от захвата SIGINT, введя handle SIGINT noprint pass
в приглашении gdb перед запуском программы.
Ответ 3
Один из вариантов - загрузить основной файл, созданный, когда он не запущен в отладчике, в gdb. Изнутри gdb введите core-file [filename]
.
Ответ 4
Вы также можете отправить CTRL-C (aka SIGINT) с другого терминала: kill -INT