通过在客户的机器上运行我们的软件,我们可以获得核心文件。不幸的是,由于我们一直使用-O2 进行编译,而没有调试符号,这导致了无法弄清崩溃原因的情况,我们修改了构建,现在它们一起生成-g和-O2。然后,我们建议客户运行-g二进制文件,以便于调试。
我有几个问题:
当从Linux发行版生成核心文件而不是我们在Dev中运行的核心文件时,会发生什么情况?堆栈跟踪是否有意义?
在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%肯定。
严格禁止远程调试。
谢谢
喵喵时光机
暮色呼如