关于android 上 gdb调试进程的方法请参考前一篇文章。


如果 android应用程序 包含动态库调用,程序异常退出后 给出一堆地址,

I/DEBUG ( 841): signal 11 (SIGSEGV), fault addr deadbaad
I/DEBUG ( 841): r0 00000000 r1 afd1498d r2 00000027 r3 00000070
I/DEBUG ( 841): r4 afd42328 r5 00000000 r6 00000000 r7 4e6fae30
I/DEBUG ( 841): r8 00100000 r9 a811c2f9 10 4e5fb000 fp 0013cdb8
I/DEBUG ( 841): ip 0000173c sp 4e6fa9d8 lr deadbaad pc afd11f40 cpsr 60000030
I/DEBUG ( 841): d0 400000003eaaaaab d1 3ff0000041f00000
I/DEBUG ( 841): d2 0000000050baf6de d3 0000000000000000
I/DEBUG ( 841): d4 00000007000000b4 d5 3fe999999999999a
I/DEBUG ( 841): d6 3fe000000000000binder: release proc 1047, transaction 109259, not freed
0 d7 3eaaaaab3f800000
I/DEBUG ( 841): d8 0000000000000000 d9 0000000000000000
I/DEBUG ( 841): d10 0000000000000000 d11 0000000000000000
I/DEBUG ( 841): d12 0000000000000000 d13 0000000000000000
I/DEBUG ( 841): d14 0000000000000000 d15 0000000000000000
I/DEBUG ( 841): scr 80000012


根据 pc 地址 及crash的 动态库可以推断出现问题的 代码位置,

利用 gcc 的 命令arm-eabi-addr2line ,从地址到代码位置的定位:

具体例子:比如我的 动态库为 hello.so,把此库放在本地 带 symbols 的android lib目录下,执行

arm-eabi-addr2line -C-f -e /path/to/lib/with_sysbols/hello.so afd11f40

上面的afd11f40 为 crash时的pc 地址:

(I/DEBUG ( 841): ip 0000173c sp 4e6fa9d8 lr deadbaad pc afd11f40 cpsr 60000030

注意点:

1. 最好把你的动态苦编译成调试版本(-g)

2. 要把你的动态苦放在android 动态库的 sysbols版本目录下,比如我的机器上目录为:(Eg.)/home/usera/android/out/target/product/generic/symbols/system/lib




更多相关文章

  1. 2011.09.21——— android 动态壁纸开发
  2. android 获取位置
  3. Android设备获取wifi下的ipv6地址
  4. Android网络游戏之神农诀项目开发--视频观看地址
  5. Android 系统音量最大值的定义位置以及默认值的修改方法
  6. 最新eclipse中android插件安装下载地址
  7. android手机两种方式获取IP地址
  8. android 创建动态创建菜单(钩子)

随机推荐

  1. Android动画之三:Property Animation(上)
  2. Android进阶(二)https请求No peer certif
  3. Android实现音乐播放 Music 详解
  4. Android(安卓)判断、创建和删除快捷方式
  5. android之JSON解析(二)
  6. Ubuntu13.04环境下载、编译Android源代码
  7. node.js+android(使用HttpURLConnection
  8. Android(安卓)Activty使用示例【慢慢更新
  9. [cocos2dx] cocosdx编译工程那些事
  10. receiver定制自动启动一个程序