随笔 - 119  文章 - 290  trackbacks - 0

博客搬家了哦,请移步
叫我abc

常用链接

留言簿(12)

随笔分类

我的博客

搜索

  •  

积分与排名

  • 积分 - 301934
  • 排名 - 84

最新评论

阅读排行榜

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

汇编调试

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

arm汇编

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

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

posted on 2012-03-12 17:33 LOGOS 阅读(4527) 评论(2)  编辑 收藏 引用

FeedBack:
# re: android ndk调试知识[未登录] 2013-06-20 22:58 dennis
博主你好,请问如果没有.so的源代码,应该如何进行arm的汇编级调试呢?  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理