coredump檔案在除錯程式時,能夠快速將堆疊恢復到程式崩潰時的狀態,對於程式碼除錯很有幫助,尤其是對於哪些難以復現的bug。
在預設情況下,是不生成coredump檔案的。
可以透過命令ulimit -c
檢視當前系統允許生成coredump檔案的大小。預設情況下,返回0
,表示不允許生成coredump檔案。
透過命令ulimit -c unlimited
設定對coredump檔案的大小不設限制。需要注意的是,執行這條命令並不會永久儲存這個設定,需要將該命令寫入.bashrc
檔案中,否則,僅在當前shell中生效。
在預設情況下,生成的coredump檔案在/var/lib/systemd/coredump/
目錄中,檔名的設定規則按照檔案/proc/sys/kernel/core_pattern
中的內容設定。生成的coredump檔案是壓縮過的格式,屬於zst檔案。
預設設定兼顧了coredump檔案的大小,還能透過coredumpctl命令進行檢視和除錯,所以這裡就採用預設配置。
coredumpctl的常用命令:
# 檢視當前coredump檔案列表
coredumpctl list
# 檢視對應程式的coredump檔案列表
coredumpctl list <executable>
# 除錯程式,僅匹配最新的那個
coredumpctl debug <executable> <path to executable>
需要注意的是,實際可執行檔案為release模式下生成的coredump檔案,是得不到太多可用資訊的,可以在gdb中指定可執行檔案路徑,這個可執行檔案可以攜帶除錯資訊,使用-g編譯,但需要保證程式碼和release版本一致,那麼這個coredump和可執行檔案就是匹配的,可以在除錯時獲取到上下文資訊
可以透過命令coredumpctl debug <executable> <path to executable>
指定帶上下文資訊的可執行檔案,也可以使用命令coredumpctl debug <executable>
對coredump進行檢視,然後透過命令file <path to executable>
載入帶上下文資訊的可執行檔案。