簡體   English   中英

在沒有核心文件的情況下調試核心文件

[英]Debug corefile without corefile

上下文:我的程序在服務器上運行,它是在沒有調試選項的情況下編譯的(很難更改該配置)。

我得到了不包含符號的核心文件,並且我有源代碼(不幸的是,本地無法重現錯誤)。

我知道strip ( https://man7.org/linux/man-pages/man1/strip.1.html ) 可以從 ELF 中刪除符號。 有沒有工具可以將它們添加回來?

有沒有工具可以將它們添加回來?

不,但您可以為 GDB 提供帶有調試符號的二進制文件,而不是實際生成core的二進制文件。

最佳實踐是始終使用調試符號構建,例如gcc -g -O2 foo.c -o foo-g保留foo-g for future debugging, but ship to production a stripped binary:交付foo-g for future debugging, but ship to production a stripped binary: strip -g -o foo foo -g`。

當您從生產中獲得core時,只需使用gdb foo-g core ,您將有更輕松的調試時間。


但是讓我們假設您沒有遵循最佳實踐,而是使用gcc -O2 foo.c -o foo構建了您的二進制文件。 你能做些什么來恢復調試信息嗎?

使用gcc (和g++ ),您應該能夠。 只需從完全相同的源重新構建應用程序,使用完全相同的命令行標志,但附加-g 使用新建的二進制文件來調試core

如果您使用了clang ,則此過程可能不起作用,因為使用和不使用-gclang不會生成相同的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM