coredump檔案的使用

EricLing0529發表於2024-04-01

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>載入帶上下文資訊的可執行檔案。

相關文章