调试没有符号的corefile



上下文:我的程序运行在服务器上,没有调试选项编译(很难改变配置)。

我得到了不包含符号的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:条带-g -o foo foo-g '。

当您从生产中获得core时,只需使用gdb foo-g core,您将更容易调试。


但是让我们假设您没有遵循最佳实践,并使用gcc -O2 foo.c -o foo构建二进制文件。你能做些什么来恢复调试信息吗?

使用gcc(和g++),您应该能够。只需从完全相同的源重新构建应用程序,使用完全相同的命令行标志,但附加-g。使用新构建的二进制文件调试core

如果您使用clang,这个过程可能无法工作,因为clang在使用和不使用-g时不会产生相同的代码。

相关内容

  • 没有找到相关文章