【发布时间】:2019-08-20 11:42:39
【问题描述】:
我正在分析一个核心文件,上面写着:
Program terminated with signal 5, Trace/breakpoint trap
从这一行我可以确定这是由于程序在 GDB 下遇到了断点吗?
有没有在调试器下不运行时可能出现上述错误的情况?
【问题讨论】:
-
我对 Unix 系统的了解接近 0,但是我可以在这里添加一些东西:断点只是 CPU 处理的指令。当您在某个地址设置断点时,调试器实际上会更改代码并插入一条
int 3指令。当 CPU 执行这条int 3指令时会产生一个异常,如果在调试下运行它会处理这个异常,如果不是在调试下,进程将崩溃,因为该异常不会被处理。 -
推测程序可能已经执行了
raise(SIGTRAP);。 -
何时何地抛出此错误消息?