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