Lia*_*ian 11 c++ debugging java-native-interface android-ndk android-studio
我有一个在Windows 10下由Android Studio 2.2.3创建的android项目,该项目通过其包装jar(通过JNI)使用本机库.本地库是由qmake在Android Studio之外构建的,它将在android NDK r13b中使用GCC 4.9来生成本机共享库,代码是使用-g选项编译的.
要使用这个本机库,我将包装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命令来确认调试时加载的本机库映像是未剥离的版本.但断点不会受到打击.
我的配置有什么问题?
有人能给我一些建议吗?
谢谢!
Hac*_*k06 -1
如果您的程序在预编译的代码上运行,您如何期望 AndroidStudio 达到断点?如果您在 Notepad++ 应用程序的源代码中放置一个断点,情况会是一样的。相反,您必须告诉您的项目/代码使用源代码而不是预编译的库。为此,请删除所有 .so 文件并链接源代码,以便 NDK 将从那里进行编译。
编辑:
显然-g旗帜是我错过的神奇部分。对于想要深入了解此标志的人来说,一些参考作为起点:https: //ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_16.html
就我个人而言,我从来没有需要过它,但是对于其他一些情况可能会很方便。虽然不确定 Android Studio 是否支持它。无论如何,干净的方式仍然包括在 NDK 应用程序中包含源代码,以用于调试目的并确定您正在调试的内容;)