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,我可以找到它们.为什么我只收到问号?这只是因为库是用优化编译的吗?是否可以在发布模式下使用库进行调试?
注释corrupt stack
可能是你的问题。它看起来像是返回地址或虚拟表条目或被零覆盖的东西,然后控制权被转移到那里。即使您有可用的符号,这些地址也不会指向有效的符号。因此出现了段错误。
我不羡慕你的任务。这些是一些最难追踪的错误,当您更改代码以尝试捕获它们时,它们甚至可能会移动或暂时消失。你最好的选择通常是类似git bisect
或你的 VCS 等效项来找到引入它的提交。希望重现起来不会太困难。
归档时间: |
|
查看次数: |
5928 次 |
最近记录: |