我想调试android NDK应用程序,更准确地说 - 我想检查哪些参数( r4 -r8 r1-r4寄存器)从apk中的共享库传递给函数。
我尝试过:
到目前为止,这么好。现在我尝试设置断点(break <function name>
)(函数名称来自
objdump),但我得到了回复:Cannot access memory at address <...>
。 info shared
表示库已加载,这是否意味着我无法在那里设置断点?或者我做错了什么?
答案 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的一部分),可以为您处理所有血腥细节。