linux下core檔案
linux下core檔案
參考:http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html
並整合其他參考資料
在程式不尋常退出時,核心會在當前工作目錄下生成一個core檔案(是一個記憶體映像,同時加上除錯資訊)。使用gdb來檢視core檔案,可以指示出導致程式出錯的程式碼所在檔案和行數。
1.core檔案的生成開關和大小限制
(1)使用ulimit -c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,不會生成core檔案。
臨時開關 :echo 1 > /proc/sys/fs/suid_dumpable 永久有效:/sbin/sysctl -w fs.suid_dumpable=1
若程式呼叫了seteuid()/setegid()改變了程式的有效使用者或組,則在預設情況下系統不會為這些程式生成Coredump。如果你當初是以使用者A執行了某個程式,但在ps裡看到的這個程式的使用者卻是B的話,那麼這些程式就是呼叫了seteuid了。為了能夠讓這些程式生成core dump,需要將/proc/sys/fs/suid_dumpable 檔案的內容改為1(一般預設是0)。
(2)使用ulimit -c filesize命令,可以限制core檔案的大小(filesize的單位為kbyte)。若ulimit -c unlimited,則表示core檔案的大小不受限制。如果生成的資訊超過此大小,將會被裁剪,最終生成一個不完整的core檔案。在除錯此core檔案的時候,gdb會提示錯誤。
2.core檔案的名稱和生成路徑
core檔案生成路徑:
輸入可執行檔案執行命令的同一路徑下。
若系統生成的core檔案不帶其它任何副檔名稱,則全部命名為core。新的core檔案生成將覆蓋原來的core檔案。
(1)/proc/sys/kernel/core_uses_pid可以控制core檔案的檔名中是否新增pid作為擴充套件。檔案內容為1,表示新增pid作為副檔名,生成的core檔案格式為core.xxxx;為0則表示生成的core檔案同一命名為core。
可透過以下命令修改此檔案:
echo "1" > /proc/sys/kernel/core_uses_pid
(2)proc/sys/kernel/core_pattern可以控制core檔案儲存位置和檔名格式。
預設值是:core
預設位置與可執行程式在同一目錄下,檔名是core.***,其中***是一個數字。
可透過以下命令臨時修改此檔案:
echo "/corefile/core-%e-%p-%t" > core_pattern,可以將core檔案統一生成到/corefile目錄下,產生的檔名為core-命令名-pid-時間戳
永久修改:使用sysctl -w name=value命令。
例:/sbin/sysctl -w kernel.core_pattern=/var/log/%t_%e.core.%p為了更詳盡的記錄core dump當時的系統狀態,可透過以下引數來豐富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 新增命令名
3.core檔案的檢視
core檔案需要使用gdb來檢視。
gdb ./a.out
core-file core.xxxx
使用bt命令即可看到程式出錯的地方。
以下兩種命令方式具有相同的效果,但是在有些環境下不生效,所以推薦使用上面的命令。
(1)gdb -core=core.xxxx
file ./a.out
bt
(2)gdb -c core.xxxx
file ./a.out
bt
什麼時候不產生core檔案
在下列條件下不產生core檔案:
( a )程式是設定-使用者-ID,而且當前使用者並非程式檔案的所有者;
( b )程式是設定-組-ID,而且當前使用者並非該程式檔案的組所有者;
( c )使用者沒有寫當前工作目錄的許可權;
( d )檔案太大。core檔案的許可權(假定該檔案在此之前並不存在)通常是使用者讀/寫,組讀和其他讀。
參考:http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html
並整合其他參考資料
在程式不尋常退出時,核心會在當前工作目錄下生成一個core檔案(是一個記憶體映像,同時加上除錯資訊)。使用gdb來檢視core檔案,可以指示出導致程式出錯的程式碼所在檔案和行數。
1.core檔案的生成開關和大小限制
(1)使用ulimit -c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,不會生成core檔案。
臨時開關 :echo 1 > /proc/sys/fs/suid_dumpable 永久有效:/sbin/sysctl -w fs.suid_dumpable=1
若程式呼叫了seteuid()/setegid()改變了程式的有效使用者或組,則在預設情況下系統不會為這些程式生成Coredump。如果你當初是以使用者A執行了某個程式,但在ps裡看到的這個程式的使用者卻是B的話,那麼這些程式就是呼叫了seteuid了。為了能夠讓這些程式生成core dump,需要將/proc/sys/fs/suid_dumpable 檔案的內容改為1(一般預設是0)。
(2)使用ulimit -c filesize命令,可以限制core檔案的大小(filesize的單位為kbyte)。若ulimit -c unlimited,則表示core檔案的大小不受限制。如果生成的資訊超過此大小,將會被裁剪,最終生成一個不完整的core檔案。在除錯此core檔案的時候,gdb會提示錯誤。
2.core檔案的名稱和生成路徑
core檔案生成路徑:
輸入可執行檔案執行命令的同一路徑下。
若系統生成的core檔案不帶其它任何副檔名稱,則全部命名為core。新的core檔案生成將覆蓋原來的core檔案。
(1)/proc/sys/kernel/core_uses_pid可以控制core檔案的檔名中是否新增pid作為擴充套件。檔案內容為1,表示新增pid作為副檔名,生成的core檔案格式為core.xxxx;為0則表示生成的core檔案同一命名為core。
可透過以下命令修改此檔案:
echo "1" > /proc/sys/kernel/core_uses_pid
(2)proc/sys/kernel/core_pattern可以控制core檔案儲存位置和檔名格式。
預設值是:core
預設位置與可執行程式在同一目錄下,檔名是core.***,其中***是一個數字。
可透過以下命令臨時修改此檔案:
echo "/corefile/core-%e-%p-%t" > core_pattern,可以將core檔案統一生成到/corefile目錄下,產生的檔名為core-命令名-pid-時間戳
永久修改:使用sysctl -w name=value命令。
例:/sbin/sysctl -w kernel.core_pattern=/var/log/%t_%e.core.%p為了更詳盡的記錄core dump當時的系統狀態,可透過以下引數來豐富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 新增命令名
3.core檔案的檢視
core檔案需要使用gdb來檢視。
gdb ./a.out
core-file core.xxxx
使用bt命令即可看到程式出錯的地方。
以下兩種命令方式具有相同的效果,但是在有些環境下不生效,所以推薦使用上面的命令。
(1)gdb -core=core.xxxx
file ./a.out
bt
(2)gdb -c core.xxxx
file ./a.out
bt
什麼時候不產生core檔案
在下列條件下不產生core檔案:
( a )程式是設定-使用者-ID,而且當前使用者並非程式檔案的所有者;
( b )程式是設定-組-ID,而且當前使用者並非該程式檔案的組所有者;
( c )使用者沒有寫當前工作目錄的許可權;
( d )檔案太大。core檔案的許可權(假定該檔案在此之前並不存在)通常是使用者讀/寫,組讀和其他讀。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2125627/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux下core檔案設定(轉)Linux
- 在Linux下產生並除錯core檔案Linux除錯
- Linux使用基本知識:CORE檔案(轉)Linux
- linux下解壓.gz檔案、.cpio檔案、zip檔案Linux
- Linux下合併檔案Linux
- LINUX下的檔案加密Linux加密
- LINUX下建立空檔案Linux
- linux下主要檔案(轉)Linux
- Linux下把sra檔案轉成fastq檔案LinuxAST
- Linux下的檔案及檔案字尾名Linux
- Linux下安裝whl檔案Linux
- linux下檢視hosts檔案Linux
- linux下的檔案結構Linux
- Linux下輸出excel檔案LinuxExcel
- linux下解壓rar檔案Linux
- linux下檔案的校驗Linux
- 在Linux下建立大檔案Linux
- Linux下檔案描述符Linux
- linux下的檔案共享(轉)Linux
- .net core使用配置檔案
- 【ASP.NET Core】Blazor+MiniAPI完成檔案下載ASP.NETBlazorAPI
- aspnet .core 網站預設不支援檔案下載網站
- day58:Linux:BashShell&linux檔案管理&linux檔案下載上傳Linux
- Linux下批量將md檔案轉換為html檔案LinuxHTML
- linux下使用windows標頭檔案LinuxWindows
- linux下的檔案的查詢Linux
- Linux下怎樣搜尋檔案Linux
- linux下檔案加密方法總結Linux加密
- linux 下刪除亂碼檔案Linux
- Linux下刪除昨天的檔案Linux
- Linux下/etc/fstab檔案使用(轉)Linux
- Linux下修改檔案建立時間(修改檔案更改時間)Linux
- ASP.NET Core 配置檔案ASP.NET
- ASP.NET Core - 入口檔案ASP.NET
- .NET Core常用配置檔案示例
- Linux(RHEL) ISO映象檔案-下載地址Linux
- Linux 系統下解壓 rar 檔案Linux
- Linux Shell 下載網站指定檔案Linux網站