首页 >后端开发 >C++ >如何准确调试不同Linux发行版生成的核心文件?

如何准确调试不同Linux发行版生成的核心文件?

DDD
DDD原创
2024-12-17 06:35:25239浏览

How Can I Accurately Debug Core Files Generated on Different Linux Distributions?

跨不同 Linux 发行版调试核心文件

当核心文件在与您的开发环境不同的 Linux 发行版上生成时,堆栈跟踪可能并不完全有意义。动态链接的可执行文件依赖于共享库中的地址,并且这些地址在不同的发行版之间可能有所不同。 GDB 可能会错误地将崩溃归因于您的库副本中的函数,而客户的系统可能在同一地址具有不同的函数。

要验证堆栈跟踪的准确性,可以反汇编有问题的函数显示该地址属于一条指令或前面有一条非 CALL 指令。在这种情况下,堆栈跟踪是不可靠的。

要获得更准确的跟踪,您可以要求客户提供有问题的二进制文件使用的以下库:

cd /
tar cvzf to-you.tar.gz lib/libc.so.6 lib/ld-linux.so.2 ...

在您的系统:

mkdir /tmp/from-customer
tar xzf to-you.tar.gz -C /tmp/from-customer
gdb /path/to/binary
(gdb) set solib-absolute-prefix /tmp/from-customer
(gdb) core core  # Important: Set solib-... before loading core
(gdb) where      # Get meaningful stack trace!

优化调试二进制文件

与其建议客户运行 -g 二进制文件,首选方法是使用 -g 和 -O2 优化标志构建二进制文件,并在分发之前去除调试信息:

build with -g -O2 -o myexe.dbg
strip -g myexe.dbg -o myexe
distribute myexe to customers
when a customer gets a core, use myexe.dbg to debug it

这允许完整的符号调试(文件/行、局部变量),而无需共享敏感的源代码详细信息。

以上是如何准确调试不同Linux发行版生成的核心文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn