27

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

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

4

4 回答 4

36

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

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

信号编号

man signal 会告诉你信号编号(在这种情况下,SIGINT 是信号 2,所以signal 2会这样做。)

更新

果然可以使用符号名。 info signal会告诉你所有的名字等。

哦,顺便说一句,很可能您为 SIGINT 安装了信号处理程序,并且参数不正确。

于 2009-02-16T18:07:34.780 回答
26

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

于 2009-02-16T19:08:32.637 回答
7

一种选择是将不在调试器中运行时生成的核心文件加载到 gdb 中。在 gdb 中,键入core-file [filename].

于 2009-02-16T17:54:04.110 回答
3

您还可以从另一个终端发送 CTRL-C(又名 SIGINT):kill -INT

于 2009-03-26T04:52:23.873 回答