关于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. Android(安卓)Studio 2.0 Preview发布,附下载地址,支持即时运行和
  2. Android网络游戏之神农诀项目开发--视频观看地址
  3. 2011.09.21——— android 动态壁纸开发
  4. android 调试堆栈整理
  5. 2011.09.21——— android 动态壁纸开发
  6. Android设备获取wifi下的ipv6地址
  7. Android网络游戏之神农诀项目开发--视频观看地址
  8. Ndk(jni)调用第三方的so库
  9. Android学习网站

随机推荐

  1. 计算机二级考试MySQL知识点 mysql alter
  2. 计算机二级考试MySQL常考点 8种MySQL数据
  3. 计算机二级考试MySQL知识点 常用MYSQL命
  4. 阿里云下配置MySQL远程连接的步骤详解
  5. mysql解压包的安装基础教程
  6. Mysql事务处理详解
  7. Mysql元数据如何生成Hive建表语句注释脚
  8. Mysql如何使用命令实现分级查找帮助详解
  9. 通过实例分析MySQL中的四种事务隔离级别
  10. mysql修改开启允许远程连接的方法