我从Android NDK r4了解到了"ndk-gdb“这个调试工具。现在,我可以开始调试hello-jni示例(尽管存在一些问题)。
但是,对于我自己的Android应用程序,我有几个so库可以使用,它们是从大量的c/c++文件构建的。我曾经使用ndk-build构建这些so文件,然后将这些so文件复制到$PROJECT/libs目录下,无需调试即可正常工作。但是现在我想用ndk-gdb调试一个库。当我启动ndk-gdb时,它报告没有加载符号表。
我还将所有这些so文件复制到$PROJECT/bin/ndk/local/armeabi(似乎是gdb尝试加载符号表的默认目录)。尽管如此,它还是不能工作。
也许ndk-gdb在我复制so文件后不能跟踪它们?或者为什么它不能加载任何符号表,即使我在$PROJECT/bin/ndk/local/armeabi下复制了符号表?
以前有没有人遇到过这个问题?
非常感谢!
发布于 2010-09-25 13:56:08
我想你把它们复制到错误的文件夹了。旧的NDK将文件复制到bin文件夹;新的NDK将文件复制到obj文件夹,这是指向gdb查找符号的位置。
此外,请确保将预先剥离的.so文件复制到obj文件夹,而不是复制到libs文件夹中的相同文件:作为构建过程的一部分,libs文件夹中的文件已被剥离符号和调试信息。因此,您需要为每个.so文件保留两份副本:一份从libs文件夹安装到Android设备上,另一份从obj文件夹安装,以便GDB从中获取符号。
您可以不将调试文件复制到应用程序树中的obj文件夹,而是将另一个构建目录obj/文件夹添加到gdb的符号搜索路径。ndk-build设置一个文件gdb.setup,其中包含一行以set solib-search-path开头的行。您可以在该行上放置一个冒号分隔的路径,该路径包含您的所有目标obj/local/任何文件夹,然后gdb将找到这些符号。
https://stackoverflow.com/questions/3675045
复制相似问题