Android:调试共享库

标签 android debugging android-ndk gdb

我想调试 android NDK 应用程序,更准确地说 - 我想检查哪些参数(r4 - r8 r1 - r4 寄存器)从 apk 中的共享库传递给函数。

我尝试过的:

  • 我在设备上运行了 gdbserver :1234 --attach
  • 我在 PC 上运行了来自 Google 的 ndk 包的 arm-linux-androideabi-gdb
  • 我已经设置了 solib-search-path 并写了目标 remote :1234

到目前为止,还不错。现在我尝试设置断点(break <function name>)(函数名来自 objdump),但我得到回复:Cannot access memory at address <...> . info shared说库已加载,这是否意味着我不能在那里设置断点?还是我做错了什么?

最佳答案

ndk-build skript 的功能远超您的预期。
其中一件事是将 gdbserver、一个名为 gbd.setup 的文件和生成的 .so
复制到一个名为 .obj 的隐藏文件夹中/阿梅/
您必须在此处添加要调试的库,因为符号
引用它们。
这些库通过一些 adb shell pull - 命令从设备复制到您的 PC。
我在以下位置写了一篇关于该主题的文章: http://www.professional-android-development.com/articles/android-ndk-large-c-projects
将库放入正确的文件夹时,您可以设置断点。
不过,由于某些内部原因,它们可能会失败。
在这种情况下运行 ndk-gdb --start(第一次尝试也会失败),强制应用程序关闭并重新运行 ndk-gdb --start(这次不强制应用程序关闭)。

关于Android:调试共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22337732/

相关文章:

android - jquery mobile + phonegap 构建中的 Youtube iframe

java - 我可以使用 objectify 中的键更快地加载我的实体吗?

c - 使用 GDB 跟踪和记录变量值

jquery - 需要帮助追踪 jQuery 错误

opencv - 在 Android Studio 中集成 Opencv 库和实验性 Gradle 的插件,无需 .mk 文件

java - Android:BluetoothAdapter getBluetoothLeAdvertiser() 为 null

java - 更改 Intent 时应用程序崩溃

android - 如何在 Android studio 中禁用 android native 调试器

android - 交互式 PDF 阅读器 : Android

java - 在平板电脑上绘制可绘制对象