接收信号时如何自动进行gdb核心转储
How to automate gdb core dumping when receiving signal
我想避免在应用程序获得 SIGSEGV
后忘记生成核心转储文件的情况,您离开 gdb 并丢失有关该崩溃的信息。
我正在寻找的是 commands
的模拟(用于断点),因此我可以编写一组命令在我的应用程序收到信号时执行。
在每个命令之后执行的某些事情也可以工作,就像 display
一样。这里的重点是我找不到如何检查是否生成了 X 信号。
起初,我更喜欢它是在 gdb 中配置的东西。我的意思是不必更改 app/gdb 的启动方式。
提前致谢。
如果你的 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
我想避免在应用程序获得 SIGSEGV
后忘记生成核心转储文件的情况,您离开 gdb 并丢失有关该崩溃的信息。
我正在寻找的是 commands
的模拟(用于断点),因此我可以编写一组命令在我的应用程序收到信号时执行。
在每个命令之后执行的某些事情也可以工作,就像 display
一样。这里的重点是我找不到如何检查是否生成了 X 信号。
起初,我更喜欢它是在 gdb 中配置的东西。我的意思是不必更改 app/gdb 的启动方式。
提前致谢。
如果你的 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