提问人:Liang Jian 提问时间:3/5/2017 最后编辑:shizhenLiang Jian 更新时间:8/12/2023 访问量:2532
如何使用 Android Studio 2.2.3 调试外部原生库的 C++ 源代码?
How can I debug C++ source code of an external native library using Android Studio 2.2.3?
问:
我在 Windows 10 下有一个由 Android Studio 2.2.3 创建的 android 项目,该项目通过其包装 jar(通过 JNI)使用本机库。原生库是由 qmake 在 Android Studio 之外构建的,它将使用 android NDK r13b 中的 GCC 4.9 来生成原生共享库,代码是使用 option 编译的。-g
为了使用这个原生库,我把包装 jar 放在目录下,把原生库放在目录下,一切正常,我可以从 java 代码成功调用原生库中实现的方法。<proj_path>/app/libs
<proj_path>/app/src/main/jniLibs/armeabi-v7a
问题是我在调试这个android项目的时候,在cpp文件中设置的断点没有生效,请注意cpp文件不在android项目的源码树中,我只是从android studio打开它。我已经安装了最新的LLDB,并且使用“混合”调试类型开始调试,我还使用“image list”LLDB命令来确认调试时加载的本机库映像是未剥离的版本。但断点就是不会命中。
我的配置有什么问题?
有人可以给我一些建议吗?
谢谢!
答:
如果您的程序在预编译代码上运行,您如何期望 AndroidStudio 命中断点?如果您在源代码中放置断点,例如在Notepad ++应用程序中,情况也是一样的。相反,你必须告诉你的项目/代码使用源代码,而不是预编译的库。为此,请删除所有 .so 文件并链接源代码,以便 NDK 从那里编译。
编辑:
显然,旗帜是我错过的神奇部分。对于想要深入了解此标志的人来说,这里有一些参考作为起点: https://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_16.html 就我个人而言,我从来不需要它,但对于其他一些情况来说,它可能很方便。虽然不确定 Android Studio 是否支持它。无论如何,干净的方法仍然是将源代码包含在 NDK 应用程序中,以便进行调试,并确保调试的内容;)-g
评论
-g
评论