如何使用Android Studio 2.2.3调试外部本机库的C 源代码
How can I debug C++ source code of an external native library using Android Studio 2.2.3?
我有一个由Android Studio 2.2.3在Windows 10下创建的Android项目,此项目通过其包装罐(通过JNI)使用本机库。本机库是由Qmake在Android Studio之外构建的,该库将在Android NDK R13B中使用GCC 4.9生成本机共享库,该代码与-g
选项一起编译。
要使用此本机库,我将包装罐放在<proj_path>/app/libs
目录和<proj_path>/app/src/main/jniLibs/armeabi-v7a
下的本机库下,一切正常,我可以成功调用本机库中从Java代码中实现的方法。
问题是,当我调试此Android项目时,我在CPP文件中设置的断点没有生效,请注意,CPP文件不在Android项目的源树中,我只是从Android Studio。我已经安装了最新的LLDB,并开始使用"混合"调试类型进行调试,我还使用"图像列表" lldb命令确认调试时加载的本机库映像是未击中版本的。但是断点不会击中。
我的配置有什么问题?
有人可以给我一些建议吗?
谢谢!
如果您的程序在预编译的代码上运行,您期望AndroidStudio碰到断点?如果您在记事本 应用程序中的"源代码" Say中放置断点,那将是相同的。相反,您必须告诉您的项目/代码以使用源代码,而不是预编译的LIB。为此,删除所有.SO文件并链接源代码,以便NDK从那里编译。
编辑:
显然,-g
标志是我错过的神奇部分。对于想要更多有关此标志的人的起点,有些引用在这里:https://ftp.gnu.org/old-gnu/manuals/gdb/html_node/gdb_16.html就我个人而言,我从来不需要它,但是对于其他一些情况,它可能很方便。尽管不确定Android Studio是否支持它。无论如何,用于调试目的的NDK应用程序中的清洁路保留在内,并确保您要调试的内容;)
- 从C++本机插件更新Vector3数组
- GCC本机矩阵运算库
- VC++本机单元测试,找不到调试符号
- 在这种情况下,java对象是否可以调用本机函数
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 无法将标准库导入本机 android 项目中的头文件
- 使用本机 C++ 应用程序中的 C# 代码
- 在nodejs中使用本机代码的最佳方法是什么?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 在自定义程序中使用本机 Windows 自然顺序排序
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- MS 本机单元测试 - 断言::线程失败不起作用
- 将音频从浏览器流式传输到WebRTC本机C++应用程序
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- C++/CLI 混合托管/本机 DLL 不起作用
- 子系统中的异常处理:本机
- 多次调用本机方法时出现致命错误
- 将本机方法添加到 OpenJDK 源代码
- java.awt.Robot的本机源代码