我执行ctrl c时调试分段错误

时间:2009-02-16 17:48:27

标签: debugging gdb copy-paste

取消程序时出现分段错误。我正在使用gdb进行调试,问题是当我在调试时按Ctrl-C gdb不会取消程序并按照它应该做的那样停止它。

我想要的是执行Ctrl-C并且不允许gdb停止它。有没有办法做到这一点?还有其他调试建议吗?我不能使用printf,因为我真的不清楚问题的来源。

4 个答案:

答案 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