Ubuntu生成可供GDB調試的core文件

core文件做用

用gcc -g選項編譯出來的debug版本程序, 在出現"段錯誤(核心已轉儲)"時生成具備堆棧信息和調試信息的文件, 供GDB查看html

配置生成core文件

這篇博客使用的系統時Ubuntu18.04,命令行  ulimit -c  查看core大小. 默認是0, 也就是不生成core文件。可使用 ulimit -c unlimited 也就是不限制生成大小,若是你想控制生成core文件的大小, 可使用 ulimit -c 1024 之類的。這個命令是臨時有效,也就是說重啓又會恢復默認關閉,我曾嘗試過將命令寫入到 /etc/rc.local 文件,企圖程序啓動當即執行該命令達到永久生效的效果(這種作法是參考其餘博客,不知道是否是由於個人系統是18.04,他們大可能是16或者更早版本緣故),這種作法在我這邊沒有效果,重啓仍是會默認關閉。app

參考其餘博客,發現能夠經過修改 /etc/security/limits.conf 讓 ulimit -c unlimited 永久生效。文件配置以下圖:spa

紅色框選出來的是針對root用戶設置限制生成core文件大小爲 unlimited , 具體每列對應的值信息去參考該文件裏面的註釋說明,註釋寫的很詳細。.net

配置生成core文件的路徑和名字格式

core文件名稱和路徑若是不配置, 每次生成core文件時,會生成在發生段錯誤程序的當前目錄,文件名是 core , 在當前程序目錄生成core文件沒什麼很差,可是想到core文件會比較大,動輒會到 MB 單位,因此建議生成到同一個目錄下,方便清理。配置很簡單,只要經過輸入  echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern 命令設置 core 文件名和保存路徑,命令參數說明以下:命令行

%p - insert pid into filename 添加pid
%g - insert current gid into filename 添加當前gid
%s - insert signal that caused the coredump into the filename 添加致使產生core的信號 
%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 添加命令名debug

很不幸,個人Ubuntu18.04系統設置完這個以後,重啓依然也是被覆蓋了。參考了其餘博客和屢次嘗試以後,發現每次是重啓由於 apport程序 會將本身生成核心轉儲文件保存在特定目錄,從而將這個生成路徑寫死在 core_pattern文件裏,致使配置好的路徑每次重啓就會恢復默認的。無奈,我決定把該程序關閉,由於這個apport程序只是將系統運行時出現的錯誤上報給開發Ubuntu系統的公司,對我來講是沒有用的。修改 /etc/default/apport文件,enabled 設置爲0unix

文件的路徑名稱,經過修改 /etc/sysctl.conf 文件, 加入 kernel.core_pattern = /corefile/core-%e-%p-%t 便可。調試

結語

以上配置操做, 在Ubuntu18.04 版本是有效的,請讀者參考時注意此點!!!htm

參考博文

https://www.jianshu.com/p/e38a3f1cf7f7blog

https://blog.csdn.net/wkd_007/article/details/79757289

https://my.oschina.net/987openlab/blog/94634

https://www.cnblogs.com/faithfu/p/11933780.html

https://blog.csdn.net/chrisniu1984/article/details/12050951

相關文章
相關標籤/搜索