如何获得产生信号的外部源的回溯?

时间:2017-03-07 21:35:54

标签: c debugging signals

由于各种原因,生成

Signals。人们可以轻松获得信号编号。我们有办法获得触发信号的代码的回溯吗? 如果在一个进程中引发了信号,那么我们可以通过从信号处理程序或libunwind这样的库中放置转储回溯来查看触发信号的代码。 如果我试图找到一个过程可以找到外部信号源的方法。例如,可以运行" kill"并向进程发送信号。我们如何找到这些信号的回溯或来源。

1 个答案:

答案 0 :(得分:1)

正如其他人所建议的那样,使用GDB,在信号处理程序中设置断点,并使用bt命令显示回溯。

如果您的程序没有参数,那么很简单:

> gdb myprogram
> br mySignalHandler
> run

当它到达断点时,键入bt以获取回溯:

> bt

如果编程需要命令行参数,请使用--args选项:

> gdb --args myprogram param1 param2 etc
> br mySignalHandler
> run

当它进入你的mySignalHandler例程时它会停止。键入bt以获取回溯。

这对于代码段错误也非常有用,但在这种情况下不需要设置断点。 Segfaulting代码会自动停止,然后您可以键入bt以找出它死亡的位置。