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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

core dump 崩溃分析

發布時間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 core dump 崩溃分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • linux core dump
  • 分析無調試符號 core dump 文件

linux core dump

一般稱為核心轉儲、內核轉儲,統稱為轉儲文件。

代表某個時刻、某個進程的內存信息映射。包含了生成轉儲文件時該進程的整個內存信息以及寄存器信息。

轉儲文件可以是某個進程的,也可以是整個系統的。

可以在進程運行中生成,也可以在進程或者系統崩潰時自動生成。

為運行中的進程創建 core dump 文件一般通過 gdb 生成,使用 gdb 把進程 attach 進來之后,執行 generate-core-file 或者 gcore 命令來生成 core dump文件。
(程序運行異常,但是沒有崩潰,可以通過為運行中的進程創建 core dump 分析異常原因。)

運行中的程序生成 core dump 文件:

ps -aux | grep process //獲取正在運行中的 process進程的進程id。 gdb attach 29843 gcore test.core //運行中的程序生成 test.core文件。

更多的情況是對程序崩潰時產生的 core dump 文件進行分析。

如何讓程序崩潰時自動產生 core dump 文件?
如果系統中 ulimit -c 命令顯示為0,表示當前不會自動生成 core dump 文件。
需要對于 ulimit -c 進行設置:
①:設置為無限值:ulimit -c unlimited。

core 文件名由 /proc/sys/kernel/core_pattern 文件控制。

[root@VM-16-8-centos remote-section]# cat /proc/sys/kernel/core_pattern core

默認配置為 core 文件。
存在的缺陷:只有 core 文件名,如果程序在不同的地方崩潰,新生成的 core 文件將會覆蓋舊的 core 文件。

修改方式之一:加上進程名、pid、時間戳。

echo -e "%e-%p-%t" > /proc/sys/kernel/core_pattern

使用 gdb 分析 core dump 文件:

加載core文件:

gdb ./[可執行文件] [core dump 文件]

程序收到 SIGSEGV 信號終止表示出現了段錯誤 Segmentation fault。
段錯誤:非法訪問內存。

定位到崩潰的位置:查看堆棧

bt

f [數字] 根據崩潰幀的位置切換到數字對應的幀。

切換到 2 號幀。

f 2

進入崩潰所在幀之后可以通過查看局部變量信息和源代碼進行原因分析。

分析方向:
①:內存是否分配不夠。(很少遇到)
②:是否出現棧溢出。(棧溢出非常難定位)
…………

分析無調試符號 core dump 文件

已經發布的正式版軟件,為了運行效率或節省空間等都會去掉調試信息,調試起來相對復雜。
沒有調試符號就無法查看參數,局部變量等信息。

使用 bt 命令 或者 where 命令定位到程序崩潰時調用棧的位置。

在 gdb 中使用 !head main.cpp -n 15 命令查看 main.cpp文件的前 15行代碼。

總結

以上是生活随笔為你收集整理的core dump 崩溃分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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