Android:调试共享库

时间:2014-03-11 22:09:53

标签: android debugging android-ndk gdb

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

我尝试过:

  • 我在设备上运行gdbserver:1234 --attach
  • 我在PC上运行了来自ndk软件包的arm-linux-androideabi-gdb
  • 我设置了solib-search-path和写入目标远程:1234

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

&#34;无法访问地址&lt; ...&gt;&#34;通常表示PC上的.so文件与Android上的.so文件不匹配。你重新编译并重新安装了吗?

是的,你没有使用&#34; ndk-gdb&#34;是什么原因?这是一个脚本(NDK的一部分),可以为您处理所有血腥细节。