如何调试原生 Android 应用程序?
Posted
技术标签:
【中文标题】如何调试原生 Android 应用程序?【英文标题】:How to debug a native Android app? 【发布时间】:2012-09-17 23:58:56 【问题描述】:我已经安装了Sequoyah android Native Support,现在我可以执行调试模式了。我在调用本机方法的同一行中有一个断点,所以当我执行调试 Java 模式时,eclipse 在这一行停止,我执行“ndk-gdb”,我午餐 C/C++ 调试模式,我看到控制台做点什么。但是,如何放置 C 断点?因为我的 C 代码是一个 .so 库,所以我不能在这个文件中放置断点。我有一个 JNI floder,其中有 .c 和 .h 文件,但是当我放置断点时不要停止。 Eclipse 日志识别断点,但打印错误。
中断插入 com_example_pruebaffmpeg_MainActivity.c:4323 错误,msg="未加载符号表。使用\"file\"命令。"
【问题讨论】:
您是否编译了包含调试信息/符号的 C 代码?如果您使用 GCC 进行编译,请确保在编译和链接步骤中都包含-g
选项。
我不知道你给我解释什么。我正在使用 ndk-build 编译我的 C 代码并获得一个 .so 库。我使用 NDK 工具在 Eclipse 中运行 Android 项目。
对于 ndk-build,您需要采取其他步骤来使用调试符号进行构建。看看this question
【参考方案1】:
您是否尝试过卸载 Sequoyah 并仅使用 ADT?从版本 20 开始,Eclipse ADT plugin 可以比旧的 Sequoyah 处理方式更轻松可靠地调试 NDK 项目。
【讨论】:
我已经卸载了 Sequoyah,并尝试使用 ADT 启动调试器,但它没有运行。您能否解释一下或发布链接? 我按照link 上的说明进行操作,但调试器不起作用 并在控制台打印此错误----> 警告:解析目标库列表时(第 2 行):没有为 /system/bin/linker BFD 定义段:/home/beni/workspace/ Prueba/obj/local/armeabi-v7a/linker:警告:未为“.ARM.exidx”部分设置 sh_link 警告:无法加载 63 个库的共享库符号,例如libstdc++.so。使用“info sharedlibrary”命令查看完整列表。你需要“set solib-search-path”还是“set sysroot”?没有加载符号表。使用“文件”命令。 如果您收到错误:“警告:未为部分 `.ARM.exidx' 设置 sh_link” 和 “警告:无法加载本机库:不能加载库:soinfo_relocate(linker.cpp:975): 在 Android 4.2.x 上找不到符号 "__exidx_end" 引用的 [...]" 试试这里写的内容:@987654323 @以上是关于如何调试原生 Android 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NDK 原生代码中获取断点并在 Android Studio 中调试原生代码?