只有gdb在ARM上报告的回溯中的问号

Luc*_*lon 8 c++ debugging gdb gdbserver

我正在尝试使用ARM上的gdbserver调试软件以获得崩溃的回溯.不幸的是我只得到问号.无处不在,我读到这个问题只是缺少符号,但符号并没有从我的库中删除.

如果我尝试使用file命令在客户端加载符号,我得到:

reading symbols from <path>/libQtWebKit.so.4.7.2...(no debugging symbols found)...done.
Run Code Online (Sandbox Code Playgroud)

然后,当崩溃发生时:

Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
(gdb) bt
#0  0x00000000 in ?? ()
#1  0x4bf38b88 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Run Code Online (Sandbox Code Playgroud)

我的库是在发布时编译的,但符号实际上是存在的.有了nm,我可以找到它们.为什么我只收到问号?这只是因为库是用优化编译的吗?是否可以在发布模式下使用库进行调试?

Kar*_*ldt 3

注释corrupt stack可能是你的问题。它看起来像是返回地址或虚拟表条目或被零覆盖的东西,然后控制权被转移到那里。即使您有可用的符号,这些地址也不会指向有效的符号。因此出现了段错误。

我不羡慕你的任务。这些是一些最难追踪的错误,当您更改代码以尝试捕获它们时,它们甚至可能会移动或暂时消失。你最好的选择通常是类似git bisect或你的 VCS 等效项来找到引入它的提交。希望重现起来不会太困难。