在linux系統下core檔案的除錯方法
在程式不尋常退出時,核心有可能把該程式當前記憶體對映到core
檔案裡,核心會在當前工作目錄下生成乙個
core
檔案(當乙個程式崩潰時,在程序當前工作目錄的
core
檔案中複製了該程序的儲存影象。
core
檔案僅僅是乙個記憶體映象
(同時加上除錯資訊
),主要是用來除錯的
)。使用
gdb來檢視
core
檔案,可以指示出導致程式出錯的**所在檔案和行數。
1.core
檔案的生成開關和大小限制
--------------------------------- 1
)使用ulimit -c
命令可檢視
core
檔案的生成開關。若結果為
0,則表示關閉了此功能,不會生成
core
檔案。
2)使用
ulimit -cfilesize
命令,可以限制
core
檔案的大小(
filesize
的單位為
kbyte
)。若ulimit -cunlimited
,則表示
core
檔案的大小不受限制。如果生成的資訊超過此大小,將會被裁剪,最終生成乙個不完整的
core
檔案。在除錯此
core
檔案的時候,
gdb會提示錯誤。
2.core
檔案的名稱和生成路徑
----------------------------
若系統生成的
core
檔案不帶其它任何擴充套件名稱,則全部命名為
core
。新的core
檔案生成將覆蓋原來的
core
檔案。 1)
/proc/sys/kernel/core_uses_pid
可以控制
core
檔案的檔名中是否新增
pid作為擴充套件。檔案內容為
1,表示新增
pid作為副檔名,生成的
core
檔案格式為
core.***x;為0
則表示生成的
core
檔案同一命名為
core。
可通過以下命令修改此檔案:
echo "1" > /proc/sys/kernel/core_uses_pid 2
)proc/sys/kernel/core_pattern
可以控制
core
檔案儲存位置和檔名格式。
可通過以下命令修改此檔案:
echo "/corefile/core-%e-%p-%t" > core_pattern
,可以將
core
檔案統一生成到
/corefile
目錄下,產生的檔名為
core-
命令名-pid-
時間戳
以下是引數列表:
%p - insert pid into filename
新增pid
%u - insert current uid into filename
新增當前
uid
%g - insert current gid into filename
新增當前
gid
%s - insert signal that caused the coredump into the filename
新增導致產生
core
的訊號
%t - insert unix time that the coredump occurred into filename
新增core
檔案生成時的
unix時間
新增主機名
%e - insert coredumping executable name into filename
新增命令名
3.core
檔案的檢視
-----------------
core
檔案需要使用
gdb來檢視。
gdb ./a.out
core-file core.***x 使用
bt命令即可看到程式出錯的地方。
以下兩種命令方式具有相同的效果,但是在有些環境下不生效,所以推薦使用上面的命令。 1
)gdb -core=core.***x
file ./a.out
bt 2)
gdb -c core.***x
file ./a.out bt
4.開發板上使用
core
檔案除錯
-----------------------------
如果開發板的作業系統也是
linux
,core
除錯方法依然適用。如果開發板上不支援
gdb,可將開發板的環境(標頭檔案、庫)、可執行檔案和
core
檔案拷貝到pc的
linux
下,執行相關命令即可。
注意:待除錯的可執行檔案,在編譯的時候需要加-g,
core
檔案才能正常顯示出錯資訊!
linux系統 linux下core檔案設定
在程式不尋常退出時,核心會在當前工作目錄下生成乙個core檔案 是乙個記憶體映像,同時加上除錯資訊 使用gdb來檢視core檔案,可以指示出導致程式出錯的 所在檔案和行數。1.core檔案的生成開關和大小限制 1 使用ulimit c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,...
在Linux下產生並除錯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檔案
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 size是個0,程式出錯時不會產生core檔案了。ulimit ...