当前位置:操作系统 > 安卓/Android >>

android ndk调试知识

ndk-gdb
最近用NDK开发一些东西,结果调试相关的内容学习了不少。因为自己也手生,所以就不保证接下来介绍的内容完全正确。

编译可调试代码NDK_DEBUG=1;apk的androidmanifest.xml也要配置为debugable=true。
遇上麻烦的时候NDK_LOG=1,--verbose,V=1可以输出更详细的信息排查问题。

调试符号debug symbol./obj/local/armeabi。如果动态库不放到这里,就会提示no debug symbol。
如果想知道当前哪些动态库包含了调试信息,使用shared指令。
gdb)shared

汇编调试
disass,dump函数的全部汇编
ni,单步调试汇编
si,进入汇编子函数
display/5i $pc,这是我调试前喜欢的设置,这样每调试一步,就会自动打印下5条指令,很舒适。

arm汇编arm的汇编和x86的汇编有些不一样,比较常见的是这几条:

bl,类似call,函数调用。r0-rn是传入参数,调用后r0是返回值。
ldr,将内存载入寄存器。
str,将寄存器写入内存。
ldr rn,[pc,#offset]
add rn,pc,rn
这种指令组合比较特别,其实是将这个函数外的变量地址加载进来,也就是访问全局变量。
局部变量,包括当前函数参数,使用sp+#offset表示其内存位置。
其他的就跟x86的差不多了。  


摘自  LOGOS  
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,