[英]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
,則此過程可能不起作用,因為使用和不使用-g
, clang
不會生成相同的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.