Linux之core檔案分析

2021-09-29 19:45:08 字數 2453 閱讀 7839

當程式在執行的過程中異常終止或崩潰,作業系統會將程式當時的記憶體狀態記錄下來,儲存在乙個檔案中,這種行為就叫做core dump。我們可以認為 core dump 是「記憶體快照」,但實際上,除了記憶體資訊之外,還有些關鍵的程式執行狀態也會同時 dump 下來,例如暫存器資訊(包括程式指標、棧指標等)、記憶體管理資訊、其他處理器和作業系統狀態和資訊,主要格式是elf格式。core dump 對於程式設計人員診斷和除錯程式是非常有幫助的,因為對於有些程式錯誤是很難重現的,例如指標異常,而 core 檔案可以再現程式出錯時的情景。

core 檔案一般都很大,如果core檔案很多占用硬碟空間太大,最終可能導致宕機。

1、檢視是否開啟core dump:

ulimit -c
如果輸出:0,說明是關閉的,如果輸出:unlimited,說明是開啟的。

2、開啟core dump,並且不限制core檔案大小,只限當前會話有效:

ulimit -c unlimited
3、開啟core dump,限制core檔案大小,單位是kb,只限當前會話有效:

ulimit -c 30000000
4、關閉core dump,只限當前會話有效:

ulimit -c 0
5、如果需要長久有效,有兩種方式:

①在/etc/profile中,將0改為unlimited,然後source /etc/profile生效;

②在/etc/security/limits.conf設定:

6、core檔案預設儲存的位置是程式被執行的可執行檔案的目錄,修改/proc/sys/kernel/core_pattern內容則可以改變目錄和檔名,預設是:core,可以改為:

/tmp/corefile/core-%e-%p-%t
常用格式有:

1>%%:單個%字元

2>%p:所dump程序的程序id

3>%u:所dump程序的實際使用者id

4>%g:所dump程序的實際組id

5>%s:導致本次core dump的訊號

6>%t:core dump的時間 (由2023年1月1日計起的秒數)

7>%h:主機名

8>%e:程式檔名

7、預設檔名是core,修改/proc/sys/kernel/core_uses_pid,內容改為1,則檔名變為core.***,其中 ***為程序pid。

一般使用gdb進行檢視,gdb中常用命令有:

1、l(list):顯示源**,並且可以看到對應的行號;

2、b(break)x:x是行號,表示在對應的行號位置設定斷點;

3、p(print)x:x是變數名,表示列印變數x的值;

4、r(run):表示繼續執行到斷點的位置;

6、c(continue):表示繼續執行;

7、q(quit):表示退出gdb;

8、info share:檢視已載入的動態庫;

9、bt:檢視程式堆疊資訊;

1、sigabrt:呼叫abort函式時產生此訊號。程序異常終止。

2、sigbus:指示乙個實現定義的硬體故障。

3、sigemt:指示乙個實現定義的硬體故障。emt這一名字來自pdp-11的emulator trap 指令。

4、sigfpe:此訊號表示乙個算術運算異常,例如除以0,浮點溢位等。

5、sigill:此訊號指示程序已執行一條非法硬體指令。4.3bsd由abort函式產生此訊號。sigabrt現在被用於此。

6、sigiot:這指示乙個實現定義的硬體故障。iot這個名字來自於pdp-11對於輸入/輸出trap(input/outputtrap)指令的縮寫。系統v的早期版本,由abort函式產生此訊號。sigabrt現在被用於此。

7、sigquit:當使用者在終端上按退出鍵(一般採用ctrl-/)時,產生此訊號,並送至前台程序組中的所有程序。此訊號不僅終止前台程序組(如sigint所做的那樣),同時產生乙個core檔案。

8、sigse**:指示程序進行了一次無效的儲存訪問。名字se**表示「段違例(segmentationviolation)」。

9、sigsys:指示乙個無效的系統呼叫。由於某種未知原因,程序執行了一條系統呼叫指令,但其指示系統呼叫型別的引數卻是無效的。

10、sigtrap:指示乙個實現定義的硬體故障。此訊號名來自於pdp-11的trap指令。

11、sigxcpusvr4和4.3+bsd支援資源限制的概念。如果程序超過了其軟cpu時間限制,則產生此訊號。

12、sigxfsz:如果程序超過了其軟檔案長度限制,則svr4和4.3+bsd產生此訊號。

core檔案分析

剛開通部落格,想寫部落格很久了,今天終於開通了。先把之前寫的學習筆記貼上來吧。在程式執行出現segmentfault 後,我們會通過 gdb來除錯 core 檔案定位問題,下面我們來分析下 core 檔案是什麼?首先需要明確的一點就是core 檔案也是 elf格式的,elf的格式如下 elf檔案參與...

Linux生成core檔案 core檔案路徑設定

在linux下產生並除錯core檔案 先看看我用的是個什麼機器 uname a linux dev 2.4.21 9.30axsmp 1 smp wed may 26 23 37 09 edt 2004 i686 i686 i386 gnu linux 再看看預設的一些引數,注意core file ...

Linux生成core檔案 core檔案路徑設定

在linux下產生並除錯core檔案 先看看我用的是個什麼機器 uname a linux dev 2.4.21 9.30axsmp 1 smp wed may 26 23 37 09 edt 2004 i686 i686 i386 gnu linux 再看看預設的一些引數,注意core file ...