Linux開啓core-dump簡單總結

說明

core dump在應用crash掉之後對問題的診斷是很有幫助的。而在默認安裝的時候core dump是關閉狀態的。

問題一:如何查看系統是否打開了core dump

使用ulimit -c查看core dump是否打開。如果結果爲0,則表示此功能處於關閉狀態,不會生成core文件

問題二:如何打開core dump

  • 方法一:命令行方式【ulimit -c 1024】,在這個例子中打開了core dump 同時限制文件大小爲1024k,現在的程序佔用內存都比較兇猛,以前寫C程序需要計算內存的時代已經過去了。如果不加限制,可能一個core文件,幾個G 就出去了~,當然沒有限制的方式還是有的【ulimit -c unlimited】
  • 方法二:配置profile文件,打開/etc/profile文件,在裏面可以找到【ulimit -S -c 0 > /dev/null 2>&1】,將它改成【ulimit -S -c unlimited > /dev/null 2>&1】
  • 方法三:修改/etc/security/limits.conf文件,添加【* soft core 0】,這個方法可以針對指定用戶或用戶組打開core dump【user soft core 0或@group soft core 0】。不過要使用這個方法一定要將方法二提到的那行註釋掉,不可同時存在

問題三:如何查看core文件的保存路徑和文件名格式

默認情況下,在打開core後,如果應用發生crash,那麼會在應用所在位置,產生一個core.【應用pid】的文件,文件名的可讀性不高,管理也不方便。
查看正在使用的core文件路徑和格式【more /proc/sys/kernel/core_pattern】
後面自動添加pid的配置是在【more /proc/sys/kernel/core_uses_pid】裏面配置的,如果爲1就是自動添加

問題四:如何修改core文件的保存路徑和文件名格式

修改/etc/sysctl.conf文件【vi /etc/sysctl.conf】,添加需要保存的路徑【kernel.core_pattern = /tmp/corefile/core.%e.%t】,需要注意的是該路徑必須應用有寫的權限,不然core文件是不會生成的。再執行命令【sysctl -p】即可生效。關於core_users_pid默認在sysctl文件裏面已經存在,不需要更改,pid還是很重要的信息。

附上core文件支持的格式列表:

  • %p – insert pid into filename 【pid】
  • %u – insert current uid into filename 【uid】
  • %g – insert current gid into filename 【gid】
  • %s – insert signal that caused the coredump into the filename 【core信號】
  • %t – insert UNIX time that the coredump occurred into filename 【core文件生成時的unix時間】
  • %h – insert hostname where the coredump happened into filename 【主機名】
  • %e – insert coredumping executable name into filename 【應用的名字】

問題五:如何知道core的配置已經生效

這裏通過別人提供的一個例子來實現
編輯一個文件:main.c

#include <stdio.h>
int div(int i, int j)
{
    return i / j;
}
int main()
{
    int i = 2;
    int j = 0;
    printf("%d ", div(i, j));
    return 0;
}

該程序故意實現以零作爲除數的錯誤,用gcc –g main.c –o main進行編譯,然後./main執行,不可避免的程序要down掉,然後就可以到配置的core文件的位置查找,如果存在,說明配置已經生效了~

調試

gdb ./main core
進去後打 where, 就可以 show 出你是在程序哪一行當掉的,
還有在當掉時在哪個 function 裏, 這個 function是被哪個
function 所 call 的, 而這個 function 又是被哪個function
所 call 的… 一直到 main()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章