我想调试 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/