Debugging 在执行ctrl c时调试分段错误

Debugging 在执行ctrl c时调试分段错误,debugging,gdb,copy-paste,Debugging,Gdb,Copy Paste,当我取消我的程序时,我得到了一个分段错误。我使用gdb进行调试,问题是当我在调试gdb时按下Ctrl-C键时,gdb并没有取消程序并执行它应该执行的操作,即停止它 我想要的是执行Ctrl-C,并且不允许gdb停止它。有没有办法做到这一点?还有其他调试建议吗?我不能使用printf,因为我不清楚问题来自何处。一个选项是将未在调试器中运行时生成的核心文件加载到gdb中。在gdb中,键入核心文件[filename]gdb正在拦截信号。当按下CTRL-C时,实际上是在使终端驱动程序生成SIGINT 您需

当我取消我的程序时,我得到了一个分段错误。我使用gdb进行调试,问题是当我在调试gdb时按下Ctrl-C键时,gdb并没有取消程序并执行它应该执行的操作,即停止它


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

一个选项是将未在调试器中运行时生成的核心文件加载到gdb中。在gdb中,键入
核心文件[filename]

gdb正在拦截信号。当按下CTRL-C时,实际上是在使终端驱动程序生成SIGINT

您需要做的是让GDB使用signal命令生成SIGINT。语法是

信号数

man信号将告诉您信号号(在本例中,SIGINT是信号2,因此
信号2
将执行此操作。)

更新 当然,您可以使用符号名<代码>信息信号将告诉您所有名称等


哦,顺便说一句,很有可能你已经为SIGINT安装了一个信号处理程序,而参数不知何故是不正确的。

另一种方法是在运行程序之前,在gdb提示符下键入
handle SIGINT noprint pass
,阻止gdb捕获SIGINT。

你也可以发送CTRL-C(也称为SIGINT)从另一个终端:kill-INT

你也可以使用符号名来表示信号,比如“signal SIGINT”。这对我来说有点不明显-我们需要进入gdb提示符(比如ctrl+c本身),然后
signal SIGINT
将继续并向程序发送信号。嗯,是的,但有时能够中断gdb是很方便的。这应该是公认的答案,因为它对程序计时的影响最小,因此对行为的影响最小,而且它实际上回答了op的问题。