Linux環境下程式core掉了
阿新 • • 發佈:2018-12-15
(1)
Core的概念:當程式執行的過程中異常終止或崩潰,作業系統會將程式當時的記憶體狀態記錄下來,儲存在一個檔案中,這種行為就叫做Core Dump。
(2)
Core的作用:關鍵的程式執行狀態也會同時 dump 下來,例如暫存器資訊(包括程式指標、棧指標等)、記憶體管理資訊、其他處理器和作業系統狀態和資訊。core dump 對於程式設計人員診斷和除錯程式是非常有幫助的,因為對於有些程式錯誤是很難重現的,例如指標異常,而 core dump 檔案可以再現程式出錯時的情景。通過gdb看出程式掛再哪裡,分析前後的變數,找出問題的原因。
(3)
產生core的訊號:SIGQUIT,SIGILL,SIGABRT,SIGSEGV,SIGTRAP。
生成core的情景:kill -9(訊號:SIGKILL),ctrl+\(訊號:SIGQUIT),還有abort()函式,訪問記憶體錯誤,
注意:當ctrl + z 或者讓 ctrl + c時候,程式不會產生core。因為訊號為SIGTSTP(預設操作:暫停程序)或者SIGINT(預設操作:中止程序)。
(4)Linux下除錯core dump使用方法
Step1:加上-g 除錯
Step2:: 開啟core dump
Step3:
gdb program core
program為可執行程式名,core為生成的core檔案。
使用GDB,先從可執行檔案中讀取符號表資訊,然後讀取Core檔案。如果不與可執行檔案攪合在一起可以嗎?答案是不行,因為Core檔案中沒有符號表資訊。
參考資料: