2012-01-17 33 views
9

將核心轉儲加載到GDB時會顯示自動崩潰的原因。例如,如何在GDB中打印最後收到的信號?

程序以信號11終止,分段故障。

有什麼辦法再次獲取信息? 問題是,我正在寫一個需要這些信息的腳本。但是,如果信號僅在加載核心轉儲和amd後纔可用,則以後無法訪問信息。

這樣的重要功能真的沒有命令嗎?

回答

3

如果您知道核心文件名是什麼,你可以發出target core命令,respecifies目標核心文件:

(gdb) target core core.8577 
[New LWP 8577] 
Core was generated by `./fault'. 
Program terminated with signal 11, Segmentation fault. 
#0 0x080483d5 in main() at fault.c:10 
10  *ptr = '\123'; 
(gdb) 

至於隱含的問題,什麼是info last signal命令?,我不知道。似乎沒有一個。


核心文件的文件名可以在命令info target獲得:

(gdb) info target 
Symbols from "/home/wally/.bin/fault". 
Local core dump file: 
    `/home/wally/.bin/core.8577', file type elf32-i386. 
    0x00da1000 - 0x00da2000 is load1 
    0x08048000 - 0x08049000 is load2 
... 
    0xbfe8d000 - 0xbfeaf000 is load14 
Local exec file: 
    `/home/wally/.bin/fault', file type elf32-i386. 
    Entry point: 0x8048300 
    0x08048134 - 0x08048147 is .interp 
    0x08048148 - 0x08048168 is .note.ABI-tag 
    0x08048168 - 0x0804818c is .note.gnu.build-id 
    0x0804818c - 0x080481ac is .gnu.hash 
    0x080481ac - 0x080481fc is .dynsym 
    0x080481fc - 0x08048246 is .dynstr 
... 
+0

謝謝你,所以有閱讀的可能性給gdb本身的參數或將參數傳遞給我的腳本,如 「gdb executable core --batch -x myscript.py [insert arguments here]」 因爲我也發現了這種可能性,但是爲此我需要確定核心文件的名稱,通常通過gdb的參數給出這個文件的名稱 – Uhlo 2012-01-18 09:00:10

+1

@Uhlo:命令'info target'顯示可執行文件和核心文件名以及相當多一點信息。也許那會做? – wallyk 2012-01-18 18:25:23

+0

非常感謝!解析這是非常困難的,但至少它是一種工作方式:)再次感謝! – Uhlo 2012-01-19 09:18:21

8

要打印有關的最後信號的信息執行

p $_siginfo 
+1

感謝您的選擇!看來我只能在程序執行完畢後執行這個命令。每次我使用核心轉儲進行嘗試時,它都會給出錯誤「無法讀取預期的siginfo' – Uhlo 2012-01-23 08:10:27

+0

。它是gdb的內存中狀態,不會保存到磁盤。 – steve 2012-01-24 05:01:13

+0

我可以在不執行程序的情況下從核心轉儲文件打印$ _siginfo。 – firo 2016-07-12 06:16:22