debugging 如何使用Android Studio 2.2.3调试外部原生库的C++源代码?

yqkkidmi  于 2023-10-24  发布在  Android
关注(0)|答案(1)|浏览(201)

我有一个在Windows 10下由Android Studio 2.2.3创建的Android项目,该项目通过其 Package 器jar(通过JNI)使用本机库。本机库是由qmake在Android Studio外部构建的,它将使用Android NDK r13b中的GCC 4.9来生成本机共享库,代码是使用-g选项编译的。
为了使用这个本机库,我把 Package 器jar放在<proj_path>/app/libs目录下,本机库放在<proj_path>/app/src/main/jniLibs/armeabi-v7a目录下,一切正常,我可以成功地从java代码调用本机库中实现的方法。
问题是,当我调试这个android项目时,我在cpp文件中设置的断点不起作用,请注意cpp文件不在android项目的源代码树中,我只是从android studio打开它。我已经安装了最新的LLDB,我用'Hybrid'调试类型开始调试,我还使用了'image list' LLDB命令来确认调试时加载的本机库镜像是未剥离的版本,但是断点就是不命中。
我的配置有什么问题?
谁能给我给予点建议?
谢谢你,谢谢

py49o6xq

py49o6xq1#

如果你的程序运行在预编译的代码上,你如何期望AndroidStudio命中你的断点?如果你在Notepad++应用程序的源代码中放置断点,情况也是一样的。相反,你必须告诉你的项目/代码使用源代码而不是预编译的库。为此,删除所有的.so文件并链接源代码,这样NDK就可以从那里编译。

编辑:

显然,-g标志是我错过的神奇部分。一些参考作为起点的人谁想要挖掘更多关于这个标志是在这里:https://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_16.html我个人从来没有需要它,但它可能是方便的一些其他情况下.虽然不确定如果Android Studio是支持它.无论如何,干净的方法仍然是在NDK应用程序中包含源代码,以用于调试目的,并确保您正在调试;)

相关问题