GDB 找不到源代码

首先直接列出问题及其解决方法:设置a.cpp:1234这样的断点后(断点位于.so文件中),gdb知道停在哪个函数,并能够停下来,但是无法显示源文件名及行号,也无法看到源码。明显是gdb有问题或者是调试信息有问题,我试遍了-g , -gstabs , -ggdb , -gstabs+参数,最终,-gstabs+参数可以和我的gdb完美配合,输出了我想要的东西,能够在debug的时候正确的看到函数名,行号,并能正确的看到源代码。这段话是在我解决问题之后添加在原文章之前的。供快速参考。

好了,现在来看一个一般性的问题:

有时候在用gdb调试程序的时候,发现gdb找不到源码。用list命令无效。

记住: gdb的调试信息中并不包含源码,只是包含了怎样去寻找源码,但是因为某种原因,比如你的源码转移了位置或者别的原因。你需要告诉gdb到哪里去寻找源码。这个通过directory命令来实现。

 

要查看当前gdb寻找源码的路径:

show directories

添加一个新的路径到查找路径:

dir  dirname

添加多个时,个dirname用: 分开。

详细见 : http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_node/gdb_48.html

 

另外:有时候发现调试信息不正确,或者没有调试信息,而gcc在编译的时候使用的参数为-g ,这时,可以个参数-g 该为-gstabs 就可以了。 我现在碰到的就是这种情况,具体原因还不是很清楚。

当利用-gstabs编译以后,程序在停下来的时候,会显示函数堆栈,每个栈会显示源文件以及行数,但是源代码还是列不出来,原因是directory还没有设好 。

后来发现-gstabs编译后,有些源码的位置被弄错了。继续尝试-gstabs+ , 最终才看到期望的效果。 需要后续的去了解下这几个参数之前的区别以及为什么要这么用。



本文地址: http://www.bagualu.net/wordpress/archives/2339 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注