Linux系統打開core dump的配置,以及用最短程序拋出core

什麼是core dump

core dump又叫核心轉儲, 當程序運行過程中發生異常, 程序異常退出時, 由操作系統把程序當前的內存狀況存儲在一個core文件中, 叫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

#include <iostream>using namespace std;int main() {    *(char *)1=1;    return 0;}  

 


自:  http://blog.csdn.net/shijun_zhang/article/details/6577604#

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