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的檔案