本文講述利用coredump調試時,對coredump信息相關的設置方式。
設置core文件大小
-
列出所有資源的限制
#ulimit -a 1240
-
查看core file size
#ulimit -c
這裏對於 core file size:
unlimited:core文件的大小不受限制 0:程序出錯時不會產生core文件 1024:代表1024k,core文件超出該大小就不能生成了
-
設置core文件大小
#ulimit -c fileSize
注意:儘量將這個文件大小設置得大一些,程序崩潰時生成Core文件大小即爲程序運行時佔用的內存大小。可能發生堆棧溢出的時候,佔用更大的內存
查看CoreDump文件路徑配置
-
方法1:
#cat /proc/sys/kernel/core_pattern
-
方法2:
#/sbin/sysctl kernel.core_pattern
修改core dump文件路徑
-
方法1-臨時修改
修改
/proc/sys/kernel/core_pattern
文件,但/proc目錄本身是動態加載的,每次系統重啓都會重新加載,因此這種方法只能作爲臨時修改。例如:
#echo ‘/var/log/%e.core.%p’ > /proc/sys/kernel/core_pattern
-
方法2:永久修改
使用
sysctl -w name=value
命令。例如:
#sysctl -w kernel.core_pattern=/var/log/%e.core.%p
另外,爲了更詳盡的記錄core dump當時的系統狀態,可通過以下參數來豐富core文件的命名:
%% 單個%字符
%p 所dump進程的進程ID
%u 所dump進程的實際用戶ID
%g 所dump進程的實際組ID
%s 導致本次core dump的信號
%t core dump的時間 (由1970年1月1日計起的秒數)
%h 主機名
%e 程序文件名
測試是否能生成core文件
首先,向目標進程發送信號產生coredump
#kill -s SIGSEGV $$
這裏,使用當前進程的進程號,即 $$
。
其次,根據前面配置的文件路徑,查看對應目錄下是否生成了coredump文件
參考
-
登陸 LINUX 服務器,任意位置鍵入 echo "ulimit -c 1024" >> /etc/profile 退出 LINUX 重新登陸 LINUX 鍵入 ulimit -c 如果顯示 1024 那麼說明 coredump 已經被開啓。 1024 限制產生的 core 文件的大小不能超過 1024kb,可以使用參數unlimited,取消該限制 ulimit -c unlimited . 設置 Core Dump 的核心轉儲文件目錄和命名規則 /proc/sys/kernel/core_uses_pid 可以控制產生的 core 文件的文件名中是否添加 pid 作爲擴展 ,如果添加則文件內容爲 1 ,否則爲 0 proc/sys/kernel/core_pattern 可以設置格式化的 core 文件保存位置或文件名 ,比如原來文件內容是 core-%e 可以這樣修改 : echo "/corefile/core-%e-%p-%t" > core_pattern 將會控制所產生的 core 文件會存放到 /corefile 目錄下,產生的文件名爲 core- 命令名 -pid- 時間戳 ulimit -c unlimited echo "/tmp/core-%e-%p" > /proc/sys/kernel/core_pattern gcc -o main -g a.c gdb main /tmp/core-main-10815
-
https://blog.csdn.net/u011417820/article/details/71435031
1.設置core文件大小 列出所有資源的限制: ulimit -a 1240 ulimit -a.png 或者查看core file size: ulimit -c core file size: unlimited:core文件的大小不受限制 0:程序出錯時不會產生core文件 1024:代表1024k,core文件超出該大小就不能生成了 設置core文件大小: ulimit -c fileSize 注意: 儘量將這個文件大小設置得大一些,程序崩潰時生成Core文件大小即爲程序運行時佔用的內存大小。可能發生堆棧溢出的時候,佔用更大的內存 2.設置core文件的名稱和文件路徑 默認生成路徑:輸入可執行文件運行命令的同一路徑下 默認生成名字:默認命名爲core。新的core文件會覆蓋舊的core文件 a.設置pid作爲文件擴展名 1:添加pid作爲擴展名,生成的core文件名稱爲core.pid 0:不添加pid作爲擴展名,生成的core文件名稱爲core 修改 /proc/sys/kernel/core_uses_pid 文件內容爲: 1 修改文件命令: echo "1" > /proc/sys/kernel/core_uses_pid 或者 sysctl -w kernel.core_uses_pid=1 kernel.core_uses_pid = 1 b. 控制core文件保存位置和文件名格式 修改文件命令: echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern 或者: sysctl -w kernel.core_pattern=/corefile/core-%e-%p-%t kernel.core_pattern = /corefile/core-%e-%p-%t 可以將core文件統一生成到/corefile目錄下,產生的文件名爲core-命令名-pid-時間戳 以下是參數列表: %p - insert pid into filename 添加pid(進程id) %u - insert current uid into filename 添加當前uid(用戶id) %g - insert current gid into filename 添加當前gid(用戶組id) %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的命令名 3.測試是否能生成core文件 kill -s SIGSEGV $$ 查看/corefile目錄下是否生成了core文件
-
https://blog.csdn.net/yasi_xi/article/details/16118349
最近遇到一個問題,SUSE Linux系統中的某個應用程序異常而最終引發了系統core dump,但遺憾的時在系統重啓後並沒有找到core文件,影響了我們對問題的分析定位。 經過分析發現系統默認的core文件生成路徑是/var/logs,但/var/logs目錄並非系統自帶的,系統初始安裝默認自帶的是/var/log,最終導致該系統出現core dump後並沒能生成core文件,因此如何查詢和修改系統默認的core dump文件生產路徑呢?方法如下: 一. 查詢core dump文件路徑: 方法1: # cat /proc/sys/kernel/core_pattern 方法2: # /sbin/sysctl kernel.core_pattern 二. 修改core dump文件路徑: 方法1:臨時修改:修改/proc/sys/kernel/core_pattern文件,但/proc目錄本身是動態加載的,每次系統重啓都會重新加載,因此這種方法只能作爲臨時修改。 /proc/sys/kernel/core_pattern 例:echo ‘/var/log/%e.core.%p’ > /proc/sys/kernel/core_pattern 方法2:永久修改:使用sysctl -w name=value命令。 例:/sbin/sysctl -w kernel.core_pattern=/var/log/%e.core.%p 爲了更詳盡的記錄core dump當時的系統狀態,可通過以下參數來豐富core文件的命名: %% 單個%字符 %p 所dump進程的進程ID %u 所dump進程的實際用戶ID %g 所dump進程的實際組ID %s 導致本次core dump的信號 %t core dump的時間 (由1970年1月1日計起的秒數) %h 主機名 %e 程序文件名