如何檢視core檔案

2021-06-05 18:05:52 字數 1261 閱讀 6346

在unix系統下,應用程式崩潰,一般會產生core檔案,如何根據core檔案查詢問題的所在,並做相應的分析和除錯,是非常重要的,本文對此做簡單介紹。

例如,乙個程式cmm_test_tool在執行的時候發生了錯誤,並生成了乙個core檔案,如下:

-rw-r–r– 1 root cmm_test_tool.c

-rw-r–r– 1 root cmm_test_tool.o

-rwxr-xr-x 1 root cmm_test_tool

-rw——- 1 root core.19344

-rw——- 1 root core.19351

-rw-r–r– 1 root cmm_test_tool.cfg

-rw-r–r– 1 root cmm_test_tool.res

-rw-r–r– 1 root cmm_test_tool.log

[root@autotest_sim2 mam2cm]#

就可以利用命令gdb進行查詢,引數一是應用程式的名稱,引數二是core檔案,執行

gdb cmm_test_tool core.19344結果如下:

進入gdb提示符,輸入where,找到錯誤發生的位置和堆疊,如下:

(gdb) where

#0 0×4202cec1 in __strtoul_internal () from /lib/i686/libc.so.6

#1 0×4202d4e7 in strtoul () from /lib/i686/libc.so.6

#2 0×0804b4da in getmaxidfromdb (get_type=2, max_id=0×806fd20) at cmm_test_tool.c:788

#3 0×0804b9d7 in constrctvodprogram (vod_program=0×40345bdc) at cmm_test_tool.c:946

#4 0×0804a2f4 in tvrequestthread (arg=0×0) at cmm_test_tool.c:372

#5 0×40021941 in pthread_start_thread () from /lib/i686/libpthread.so.0

(gdb)

至此,可以看出檔案出錯的位置是函式 getmaxidfromdb ,兩個引數分別是2和0×806fd20,這個函式位於源**的788行,基於此,我們就可以有針對性的找到問題的根源,並加以解決。

core檔案如何檢視和除錯

除錯linux程式的時候,出現segmentation fault是最鬱悶的事情了,程式 量很大的時候,可能花很多時間都找不到出錯原因。這裡介紹一種對你除錯segmentation fault很有幫助的方法,可能能迅速幫助你找到出錯的 行。這種方法需要用到linux提供的core dump機制 當程...

core檔案的設定和檢視

使用ulimit c 命令可檢視core檔案的生成開關,若結果為0,則便是關閉了此功能,不會生成core檔案。ulimit c unlimited 設定core的檔案大小sysctl w kernel.core pattern data core.e.p.t 設定core檔案的儲存格式和路徑以下是引...

如何利用core檔案定位bug

在linux平台下面做c 開發的時候,需要特別的注意記憶體越界的問題,常見的記憶體越界現象主要有以下兩種 1.在同乙個函式內,分配變數記憶體的長度和填充變數的記憶體長度不一致。2.在同乙個模組內,不同的函式之間,記憶體分配和記憶體填充不一致。任何形式的記憶體越界都可以導致系統掛死,通常我們可以借助系...