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