gdb加载动态库成功,但是不能显示动态库中的源码(gdb+gdbserver)

发布网友

我来回答

1个回答

热心网友

因为具体的给的不够详细,不清楚你遇到的情况。
如果仅从断点上看,应该就是CApartment.cpp:55
但是,如果你的程序编译的时候,不是-O0,那个可能回不到源码,只能看汇编。
1、有时候(很少)就是编译器的错误。
2、还有可能就是你调试的程序和你的源码不匹配
3、你的程序已经崩溃了,破坏了堆栈或者GDB需要的数据。
4、这个地方有特殊的定位信息
5、其他情况,还是比较多的,经常遇到。
如果懂汇编,最好看看汇编。
如果不懂,看看那一条语句是最后一条能够跟踪的语句。
仔细看看最后一条语句的所有变量,应该能猜出来是什么问题。追问会不会是我们公司编译器的问题。公司的编译器在编译源代码的时候会在某个规则生成的镜像目录下生成一些cpp文件,这些文件有些是通过perl脚本之类的生成的。然后在编译这些cpp文件。最终生成so。

追答如果是cpp编译的不会有问题,只要原始的cpp文件能找到就没问题,如果临时生成的cpp可能有些麻烦。那些文件可能在你调试时已经删除,所以GDB找不到源代码。
但是大的项目,二次甚至多次编译的很常见,这些调试都需要很多人制定规则。具体的在这里说不明白。反正我觉得原理上没有问题,但是细节上你也说不清楚。不会看汇编,很难搞清底层。
要想找编译的问题,必须看汇编。这样才能知道编译器的意图,从而确定是人的错误还是编译器的错误。
比如这里面所说的eco文件是不是一个你们二次编译的文件,有可能源代码在那个文件中。
X:\2786\Targets\pdk\linux\arm.gnu_gcc4.ElastosOS.dbg\dbg_info/Elastos.Framework.eco
举个例子,你如果CPP里面include了一个头文件,头文件里面有可以执行的东西,而那个东西报错,最后头文件删除了,就不可能找到源代码了。再说下去,你去找顾问好了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com