Linux環境崩潰生成core文件以及調試


Linux環境崩環境潰生成core文件以及調試

gdb結合coredump定位崩潰進程 

Linux 使用core file文件快速定位程序崩潰代碼行

http://www.cnblogs.com/hazir/p/linxu_core_dump.html

http://www.cnblogs.com/niocai/archive/2012/04/01/2428128.html

http://baidutech.blog.51cto.com/4114344/904419/

Linux上Core Dump文件的形成和分析 

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文件以及調試

 

 

該程序在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文件配置生成和調試方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM