日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux环境崩溃生成core文件以及调试

發布時間:2024/4/18 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux环境崩溃生成core文件以及调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 <iostream> #include <stdio.h>using namespace std; void core_test1() {int i = 0;//below will call segmentfaultscanf("%d", i);printf(%d, i);}int main() {core_test1();return 0; }

該程序在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文件以及调试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。