我正在尝试使用 ARM 上的 gdbserver 调试软件以获取崩溃的回溯。不幸的是我只得到问号。我到处都读到这个问题只是与缺少符号有关,但符号并没有从我的库中删除。
如果我尝试使用 file 命令在客户端中加载符号,我会得到:
reading symbols from <path>/libQtWebKit.so.4.7.2...(no debugging symbols found)...done.
然后,当崩溃发生时:
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?)
我的库是在发行版中编译的,但符号实际上在那里。有了 nm 我可以找到那些。为什么我只得到问号?这仅仅是因为库是经过优化编译的吗?是否可以在发布模式下使用库进行调试?
The corrupt stack
注意可能是你的问题。它看起来像是返回地址或虚拟表条目或被零覆盖的东西,然后控制权被转移到那里。即使您有可用的符号,这些地址也不会指向有效的符号。因此出现了段错误。
我不羡慕你的任务。这些是一些最难追踪的错误,当您更改代码以尝试捕获它们时,它们甚至可能会移动或暂时消失。你最好的选择通常是这样的git bisect
或者你的 VCS 等效项来查找引入它的提交。希望重现起来不会太困难。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)