ndk-gdb有多个lib库

时间:2010-09-09 08:44:57

标签: android gdb android-ndk

我从Android NDK r4了解了“ndk-gdb”的调试工具。现在我可以开始调试hello-jni示例(虽然存在一些问题)。

但是,对于我自己的Android应用程序,我有几个可以使用的库,可以从大量的c / c ++文件构建。我曾经使用ndk-build构建这些文件,然后将这些文件复制到$ PROJECT / libs目录下,并且无需调试即可正常工作。但是现在我想用ndk-gdb来调试一个lib。当我启动ndk-gdb时,它抱怨没有加载符号表。

我还将所有这些文件复制到$ PROJECT / bin / ndk / local / armeabi(看起来像gdb尝试加载符号表的默认目录)。但它仍然不起作用。

也许ndk-gdb在复制后无法跟踪我的文件?或者为什么它不能加载任何符号表,即使我在$ PROJECT / bin / ndk / local / armeabi下复制它们?

以前有人遇到过这个问题吗?

非常感谢!

1 个答案:

答案 0 :(得分:10)

我认为你正在将它们复制到错误的文件夹中。较旧的NDK将文件复制到bin文件夹;新的将它们复制到obj文件夹,这就是它指向gdb寻找符号的地方。

另外,请确保将预先剥离的.so文件复制到obj文件夹,而不是复制到libs文件夹的相同文件:作为构建过程的一部分,libs文件夹中的文件已被删除剥离符号和调试信息。因此,您需要保留每个.so文件的两个副本:一个来自libs文件夹以安装在Android设备上,另一个来自obj文件夹以安装GDB以从中获取符号。

您可以将调试文件复制到应用树中的obj文件夹,而不是将其他构建目录obj / folders添加到gdb的符号搜索路径中。 ndk-build设置一个文件gdb.setup,其中包含一个以 set solib-search-path 开头的行。您可以在该行上放置一个以冒号分隔的路径,其中包含所有目标obj / local / whatever文件夹,然后gdb将找到这些符号。