1. 程式人生 > >記錄linux 生成crash dump文件步驟

記錄linux 生成crash dump文件步驟

roc %u rac backtrace 指定 單個 字符串 g++ 需要

執行文件編譯時加入-g 命令

例如 g++ -g test.cpp

查看當前系統限制情況

ulimit -a

設置crash dump 文件大小

ulimit -c unlimited
unlimited表示無大小限制,也可以指定具體的大小
ulimit -c 1000
表示文件大小限制為1000Kb
若要全局生效需要在/etc/profile中加入上面的命令ulimit -c 1000,然後source /etc/profile使之生效

配置dump文件生成路徑

/proc/sys/kernel/core_uses_pid
文件內容為1表示dump文件以pid為擴展名
/proc/sys/kernel/core_pattern


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” > /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為#後的數字

記錄linux 生成crash dump文件步驟