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

Отладка ошибки сегментации, когда я делаю ctrl c

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

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

4b9b3361

Ответ 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