如何在接收信号时自动化gdb核心转储

时间:2016-12-23 12:37:33

标签: c++ gdb signals gdbserver

我想避免在应用程序获得SIGSEGV之后忘记生成核心转储文件的情况,您离开gdb并丢失了有关该崩溃的信息。

我正在寻找的是类似于commands(用于断点),所以我可以编写一组命令来编写,以便在我的应用收到信号时执行。

在每个命令执行后也可以执行某些操作,就像display一样。这里的要点是我找不到如何检查是否生成了X信号。

首先,我更喜欢在gdb中配置它。通过这种方式,我的意思是不必改变app / gdb的推出方式。

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果你的gdb支持catch signal命令,你可以像断点一样编写脚本。

$ gdb ab
(gdb) list
1   main()
2   {
3       abort();
4   }
(gdb) catch signal SIGABRT
Catchpoint 1 (signal SIGABRT)
(gdb) commands
Type commands for breakpoint(s) 1, one per line.
>generate-core-file 
>end
(gdb) run
Catchpoint 1 (signal SIGABRT), 0x00007ffff7a4692f in raise ()
   from /lib64/libc.so.6
Saved corefile core.2097