在linux下core是一個記憶體映像,同時加上偵錯資訊;在linux下遇到程式異常退出或中止,我們都會使用core檔進行分析,其中包含了程式執行時的記憶體、暫存器、堆疊指標等訊息,格式為ELF,可以理解是程式工作當前狀態轉儲成一個檔案。
本教學操作環境:linux5.9.8系統、Dell G3電腦。
在linux下core是什麼?
Linux下core檔案的使用方法詳解
有時候程式會異常退出而不帶任何日誌,此時就可以使用code 檔案進行分析,它會記錄程式運行的內存,暫存器,堆疊指標等資訊
core檔:
通常在Linux 下遇到程式異常退出或中止,我們都會使用core 檔案進行分析,其中包含了程式執行時間的內存,寄存器,堆疊指針等信息,格式為ELF ,可以理解是程序工作當前狀態轉儲成一個文件,通過工具分析這個文件,我們可以定位到程序異常退出或者終止時相應的堆棧調用等信息,為解決問題提供協助。
使用core檔案偵錯
產生方法
檢視目前core 檔案的狀態
$ ulimit -a ... -c: core file size (blocks) 0 # 关闭状态 ...
開啟產生開關
ulimit -c unlimited ulimit -a ... -c: core file size (blocks) unlimited ...
對core 檔案的大小進行限制,單位為blocks ,一般1 block=512 bytes ,設定太小可能導致不會產生檔案
$ ulimit -c 1024 $ ulimit -a ... -c: core file size (blocks) 1024 ...
關閉產生開關
ulimit -c 0 ulimit -a ... -c: core file size (blocks) 0 ...
上面對core 檔案的操作僅對目前生效,若需要永久生效,則要將對應動作寫入/etc/profile
產生路徑
## core 檔案預設會產生在程式的工作目錄,可以對生成路徑進行設置,需要保證對應目錄有足夠空間並具有寫入權限echo /MyCoreDumpDir/core.%e.%p > /proc/sys/kernel/core_pattern其中命名使用的參數列表
%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 # 添加命令名/proc/sys/kernel/core_uses_pid 這個檔案的值若為1,則無論時候設定%p ,最後產生的core 檔案都會加入pid
#偵錯方法
可以使用gdb 對core 文件進行調試,編譯是需要帶上-g 選項$ gdb a.out ... (gdb) core-file core ... (gdb) bt ...如需要在PC 上調試嵌入式設備產生的core 文件,則需要選取相應平台的gdb 工具,並在進入gdb 後設定符號檔案的位置
$ xxx-xxx-gdb a.out ... (gdb) solib-search-path xxx.so:xxx.so ... (gdb) core-file core ... (gdb) bt ...相關推薦:《
Linux影片教學》
以上是在linux下core是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!