天天看點

記錄linux 生成crash dump檔案步驟

例如 ​<code>​g++ -g test.cpp​</code>​

​<code>​ulimit -a​</code>​

​<code>​ulimit -c unlimited​</code>​ 

unlimited表示無大小限制,也可以指定具體的大小 

​<code>​ulimit -c 1000​</code>​ 

表示檔案大小限制為1000Kb 

若要全局生效需要在​<code>​/etc/profile​</code>​中加入上面的指令​<code>​ulimit -c 1000​</code>​,然後​<code>​source /etc/profile​</code>​使之生效

​<code>​/proc/sys/kernel/core_uses_pid​</code>​ 

檔案内容為1表示dump檔案以pid為擴充名 

​<code>​/proc/sys/kernel/core_pattern​</code>​ 

core_pattern接受的是core檔案名稱的pattern,它包含任何字元串,并且用%作為轉移符号生成一些标示符,為core檔案名稱加入特殊含義。已定義的标示符有如下這些: 

%%:相當于% 

%p:相當于pid 

%u:相當于uid 

%g:相當于gid 

%s:相當于導緻dump的信号的數字 

%t:相當于dump的時間 

%e:相當于執行檔案的名稱 

%h:相當于hostname 

除以上這些标志位外,還規定: 

1、末尾的單個%可以直接去除; 

2、%加上除上述以外的任何字元,%和該字元都會被去除; 

3、所有其他字元都作為一般字元加入名稱中; 

4、core檔案的名稱最大值為64個位元組(包括’\0’); 

5、core_pattern中預設的pattern為core; 

6、為了保持相容性,通過設定core_uses_pid,可以在core檔案的末尾加上%p; 

7、pattern中可以包含路徑資訊。 

echo “/corefile/core-%e-%p-%t” &gt; /proc/sys/kernel/core_pattern 

将會控制所産生的core檔案會存放到/corefile目錄下(/corefile目錄需要提前建立),産生的檔案名為core-執行檔案名-pid-時間戳

在發生SIGSEGV時系統會自動在程式目錄下生成core.xxxx檔案,此即dump檔案; 

注意,此時程式不能再注冊SIGSEGV的處理函數! 

使用gdb分析dump檔案: 

1.執行gdb:gdb –core=core.xxxx 

2.在gdb中加載符号檔案:file ./a.out 

上兩步也可以統一成:gdb a.out core.xxxx 

3.定位到出錯代碼:where或backtrace,将顯示#x這樣的堆棧資訊 

4.檢視更詳細的函數調用資訊:frame x,x為#後的數字

作者:柒月

繼續閱讀