我们通过在客户的盒子上运行我们的软件来获取核心文件。不幸的是,因为我们总是在没有调试符号的情况下使用 -O2 进行编译,这导致我们无法弄清楚它为什么崩溃的情况,我们已经修改了构建,所以现在它们一起生成 -g 和 -O2。然后我们建议客户运行 -g 二进制文件,以便更容易调试。
我有几个问题:
- 当核心文件从我们在 Dev 中运行的 Linux 发行版以外的 Linux 发行版生成时会发生什么?堆栈跟踪是否有意义?
- 有没有关于在 Linux 或 Solaris 上进行调试的好书?面向示例的东西会很棒。我正在寻找现实生活中的示例,以找出例程崩溃的原因以及作者如何得出解决方案。中级到高级水平的东西会很好,因为我已经这样做了一段时间了。一些组装也会很好。
这是一个要求我们告诉客户获取 -g 版本的崩溃示例。二进制文件:
Program terminated with signal 11, Segmentation fault.
#0 0xffffe410 in __kernel_vsyscall ()
(gdb) where
#0 0xffffe410 in __kernel_vsyscall ()
#1 0x00454ff1 in select () from /lib/libc.so.6
...
<omitted frames>
理想情况下,我想找出应用程序崩溃的确切原因——我怀疑这是内存损坏,但我不是 100% 确定。
严禁远程调试。
谢谢