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的差不多了。
posted on 2012-03-12 17:33
LOGOS 阅读(4527)
评论(2) 编辑 收藏 引用