c++ - 接收信号时如何自动进行gdb核心转储

标签 c++ gdb signals gdbserver

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

我正在寻找的是与命令(用于断点)类似的东西,这样我就可以编写一组命令,以便在我的应用收到信号时执行。

在每个命令之后执行的某些东西也可以工作,就像 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

关于c++ - 接收信号时如何自动进行gdb核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41301688/

相关文章:

c++ - 使用信号/槽来避免循环依赖?

c++ - 应该在选定的平台上还是在所有平台上进行分析?

c - 使用远程 GDB 在 Eclipse 中调试

我可以使用 GDB 跳过整个文件(malloc.c 等)吗?

Django m2m_changed pk_set 为空

linux - SIGFPE 信号不终止并生成核心文件

c++ - 如何最好地对使用 boost::asio::yield_context 的类进行单元测试?

c++ - Windows Mobile 在 `new` 失败时返回 0

c++ - 如何以编程方式切换 CAPSLOCK 或防止它被键盘切换?

c - 如何使用 valgrind gdb 或任何其他选项检测未释放的分配?