2016-12-23 27 views
0

我想避免在應用程序得到SIGSEGV之後忘記生成核心轉儲文件的情況,您離開gdb並且丟失了有關該崩潰的信息。如何在接收信號時自動執行gdb核心轉儲

我在尋找的是模擬commands(用於斷點),所以我可以編寫一套命令來執行,當我的應用程序收到信號。

在每個命令之後執行的東西都可以工作,就像display一樣。這裏的關鍵是我無法找到如何檢查X信號是否生成。

起初,我更喜歡它是在gdb裏面配置的東西。由此,我的意思是不必改變應用程序/ gdb的啓動方式。

在此先感謝。

回答

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