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

歡迎訪問 生活随笔!

生活随笔

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

linux

Linux 设置core dump

發布時間:2025/3/21 linux 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 设置core dump 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://blog.csdn.net/u013010310/article/details/50578691


最近本人負責項目中的流媒體轉發模塊,查了很多資料后選擇了EasyDarwin作為轉發服務器。編譯源碼之后服務器穩定運行了半個月,但是今天突然不能正常轉發了。由于本人Linux新手,所以沒有在Linux下調試代碼的經驗,在群主的指導下知道可以設置core文件來調試代碼,于是幾經周折完成了core文件的設置,特將過程記錄下來。

什么是coredump

當程序運行的過程中異常終止或崩潰,操作系統會將程序當時的內存狀態記錄下來,保存在一個文件中,這種行為就叫做Core Dump(中文有的翻譯成“核心轉儲”)。我們可以認為 core dump 是“內存快照”,但實際上,除了內存信息之外,還有些關鍵的程序運行狀態也會同時 dump 下來,例如寄存器信息(包括程序指針、棧指針等)、內存管理信息、其他處理器和操作系統狀態和信息。core dump 對于編程人員診斷和調試程序是非常有幫助的,因為對于有些程序錯誤是很難重現的,例如指針異常,而 core dump 文件可以再現程序出錯時的情景。

Linux下打開coredump

本人使用的Linux發行版是Ubantu 14.04,設置生成coredump文件的方法如下:

  • 打開core dump功能
    在終端中輸入命令ulimit -c(也可以通過ulimit -a查看) 輸出的結果為 0,說明默認是關閉 core dump 的,即當程序異常終止時,也不會生成 core dump 文件。

    我們可以使用命令 ulimit -c unlimited 來開啟 core dump 功能,并且不限制 core dump 文件的大小; 如果需要限制文件的大小,將 unlimited 改成你想生成 core 文件最大的大小,注意單位為 blocks(KB)。
    用上面命令只會對當前的終端環境有效,如果想需要永久生效,可以修改文件/etc/bash.bashrc文件,添加一行ulimit -c unlimited,然后執行命令source /etc/bash.bashrc生效。此時通過ulimit -a查看:

    (有網友的資料是直接修改/etc/security/limits.conf文件,但是我測試了沒有效果。)
  • 設置core文件保存路徑
    默認生成的 core 文件保存在可執行文件所在的目錄下,文件名就為 core,修改此文件名方法有兩種:
    1、通過修改/proc/sys/kernel/core_uses_pid文件可以讓生成 core 文件名是否自動加上 pid 號。命令如下:echo 1 > /proc/sys/kernel/core_uses_pid生成的 core 文件名將會變成 core.pid,其中 pid 表示該進程的 PID。

    2、還可以通過修改/proc/sys/kernel/core_pattern 來控制生成 core 文件保存的位置以及文件名格式。命令可以用echo "/EasyDarwin/corefile-%e-%p-%t" > /proc/sys/kernel/core_pattern 設置生成的 core 文件保存在/EasyDarwin/ 目錄下,文件名格式為 “core-命令名-pid-時間戳”。其中:
    其中:

    • %c 轉儲文件的大小上限
    • %e 所dump的文件名
    • %g 所dump的進程的實際組ID
    • %h 主機名
    • %p 所dump的進程PID
    • %s 導致本次coredump的信號
    • %t 轉儲時刻(由1970年1月1日起計的秒數)
    • %u 所dump進程的實際用戶ID

gdb調試core文件

產生了 core 文件,我們該如何使用該 Core 文件進行調試呢?Linux 中可以使用 GDB 來調試 core 文件,步驟如下:

  • 首先,寫段錯誤代碼,這個對程序猿來說很簡單,使用 gcc 編譯源文件,加上 -g 以增加調試信息;
#include<stdio.h>int main() {int *p = NULL;*p = 2;printf("%d",*p);return 0; }

編譯:

gcc -g -o test test.c
  • 運行程序,以使程序異常終止時能生成 core 文件;
./test
  • 當core dump 之后,使用命令 gdb program core 來查看 core 文件,其中 program為可執行程序名,core 為生成的 core 文件名。
gdb test core

可以看到gdb直接定位到了程序中出錯的具體行。至于具體gdb的使用方法本人也還在摸索之中。需要說明的是,要是EasyDarwin能在錯誤時產生core文件,需要使用./Built debug命令來編譯源程序。最后感謝EasyDarwin群主的熱心幫助。


總結

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

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