Linux環境崩潰生成core檔案以及除錯

2021-09-24 01:19:13 字數 2208 閱讀 1983

步驟很詳細具體,很有幫助,所以**

windows環境崩潰問題可根據vs除錯工具檢視,linux同樣可以檢視呼叫堆疊的資訊,只是

需要更改linux設定,使程式崩潰時候產生core檔案。然後gdb除錯即可。

1產生core檔案方法

產生coredump的條件,首先需要確認當前會話的ulimit –c,若為0,則不會產生對應的coredump,需要進行修改和設定。

ulimit  -c unlimited  (可以產生coredump且不受大小限制),這種設定僅對當前生效,如果想永久生效

那麼需要在

/etc/profile中加入以下一行,這將允許生成coredump檔案

ulimit-c unlimited

2更改core dump生成路徑

因為core dump缺省會生成在程式的工作目錄,但是有些程式存在切換目錄的情況,導致core dump生成的路徑沒有規律,

所以最好是自己建立乙個資料夾,存放生成的core檔案。

我建立乙個 /data/coredump 資料夾,在根目錄data裡的coredump資料夾。

呼叫如下命令

echo /data/coredump/core.%e.%p> /proc/sys/kernel/core_pattern

將更改core檔案生成路徑,自動放在這個/data/coredump資料夾裡。

%e表示程式名, %p表示程序id

3測試生成core檔案以及除錯

#include #include using namespace std;

void core_test1()

int main()

該程式在core_test1()內部scanf的時候回崩潰,i前面應該加上&

編譯的時候帶上-g選項,這樣才能用gdb除錯core

執行後結果顯示段錯誤

進入/data/coredump資料夾可以檢視生成的core

用gdb除錯該core,命令為 gdb core.ctest.6408 ,顯示如下

program terminated with signal 11 告訴我們訊號中斷了我們的程式

敲命令: bt 可以列印堆疊資訊

這個一堆問號很多人遇到過,有人說是沒載入符號表,有人說是標準glibc版本不一致,

可以通過如下命令除錯:

gdb 可執行程式exe

進入gdb環境後

core-file  core的名字

敲命令bt可以檢視準確資訊。

示例:gdb ./ctest

進入gdb環境後,敲core-file /data/coredump/core.ctest.6408

敲bt命令,這是gdb檢視back trace的命令

可以看到最近的棧中儲存的是呼叫了io操作,之前一步是scanf,再往前能看到是

ctest.cpp中第九行 core_test1()函式出錯。

到此為止,就是core檔案配置生成和除錯方法

Linux程式崩潰core使用(續)

linux檢視呼叫堆疊的資訊,只是需要更改linux設定,使程式崩潰時候產生core檔案。然後gdb除錯即可。1產生core檔案方法 產生coredump的條件,首先需要確認當前會話的ulimit c,若為0,則不會產生對應的coredump,需要進行修改和設定。ulimit c unlimited...

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 ...