取消程序时出现分段错误。我正在使用gdb进行调试,问题是当我在调试时按Ctrl-C gdb不会取消程序并按照它应该做的那样停止它。
我想要的是执行Ctrl-C并且不允许gdb停止它。有没有办法做到这一点?还有其他调试建议吗?我不能使用printf,因为我真的不清楚问题的来源。
答案 0 :(得分:31)
gdb正在拦截信号。按CTRL-C时,实际上是导致终端驱动程序生成SIGINT。
您需要做的是让GDB使用 signal 命令生成SIGINT。语法是
信号 num
和man信号会告诉你信号编号(在这种情况下,SIGINT是信号2,所以signal 2
会这样做。)
果然,您可以使用符号名称。 info signal
会告诉你所有的名字等。
哦,顺便说一下,你可能已经为SIGINT安装了一个信号处理程序,并且参数不正确。
答案 1 :(得分:21)
另一种方法是在运行程序之前通过在gdb提示符下键入handle SIGINT noprint pass
来阻止gdb捕获SIGINT。
答案 2 :(得分:7)
一种选择是将未在调试器中运行时生成的核心文件加载到gdb中。在gdb中,键入core-file [filename]
。
答案 3 :(得分:3)
你也可以从另一个终端发送CTRL-C(aka SIGINT):kill -INT