1. 程式人生 > 其它 >linux:永久開啟core檔案功能

linux:永久開啟core檔案功能

在Linux下程式不尋常退出時,核心會在當前工作目錄下生成一個core檔案(是一個記憶體映像,同時加上除錯資訊)。使用gdb來檢視core檔案,可以指示出導致程式出錯的程式碼所在檔案和行數。

注: 1. 當然首先編譯時要帶上gdb資訊

下面說一下永久開啟生成Core檔案的步驟

1、設定core檔案的大小不受限制。

ulimit -c unlimited

2、ulimit -c校驗是否設定成功(如果是0,說明生成core檔案開關為關閉)

[root@A03-R05-I115-53-5254972 jimdb]# ulimit -c

Unlimited

【重要!!】3開啟 /etc/security/limits.conf檔案(使ulimit -c ulimited 設定永久生效

vi /etc/security/limits.conf

新增紅框中兩行:

* soft core unlimited

* hard core unlimited

用命令修改的方式:

echo "* soft core unlimited" >> /etc/security/limits.conf

echo "* hard core unlimited" >> /etc/security/limits.conf

【重要!!】4、建立存放 core檔案的資料夾 (確認應用有寫的許可權)

mkdir /export/Logs/jimdb

5、設定生成 core檔案的名稱和生成路徑(以下兩種方式任選一種,哪種生效與系統有關)

方式一: 修改/proc/sys/kernel/core_pattern和/proc/sys/kernel/core_uses_pid

echo "/export/Logs/jimdb/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

echo "1" > /proc/sys/kernel/core_uses_pid

(core_pattern檔名為core-命令名-pid-時間戳)

(kernel.core_uses_pid控制core檔案的檔名中是否新增pid作為擴充套件,檔案內容為1,表示新增pid作為副檔名,生成的core檔案格式為core.xxxx;為0則表示生成的core檔案同一命名為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 新增命令名

方式二:修改/etc/sysctl.conf

sysctl -w "kernel.core_pattern=/export/Logs/jimdb/core-%e-%p-%t" >>/etc/sysctl.conf

sysctl -w "kernel.core_uses_pid=1" >>/etc/sysctl.conf

sysctl -p (檢視生效引數,驗證設定是否生效)

5、快速驗證是否能生成core檔案

kill -s SIGSEGV $$

6、再次登入機器,檢視/export/Logs/jimdb目錄下有core-bash的檔案