• Android调试工具之adbs


    这两天在看Android的编译及制作rootfs工具的相关流程,无意中在build/tools/中发现了它——adbs!

    adbs是一个用python写的命令行工具,利用了adb,addr2line, objdump这三个工具,大家看了这三个工具,可能就能猜到,adbs是用来分析应用程序尤其是与函数库相关的crash问题:)

    具体的代码就不多看了,无外乎是一些运行环境的设定。

    下面就来看一下如何使用它:
    1. 设定好ANDROID_PRODUCT_OUT环境变量
       ANDROID_PRODUCT_OUT="[your_path]/mydroid/out/target/product/generic",因为adbs需要使用到编译好的symbols,所以你需要编译整个android的source,得到与你调试环境一致的symbols文件

    2. 直接运行adbs
       adbs logcat
       
    我特意准备了一个会crash的jni测试程序,得出的结果如下:
    I/DEBUG   (  170): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    I/DEBUG   (  170): Build fingerprint: 'tmous/htc_pyramid/pyramid:2.3.4/GRJ22/125597.1:user/release-keys'
    I/DEBUG   (  170): pid: 20715, tid: 20727  >>> [your product name] <<<
    I/DEBUG   (  170): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
    ....
    I/DEBUG   (  170):  scr 80000010
    I/DEBUG   (  170):
    I/DEBUG   (  170):          #00 execle  /[your_path]/mydroid/bionic/libc/unistd/exec.c:84
    I/DEBUG   (  170):          #01 tmalloc_small.clone.10<-tmalloc_small  /[your_path]/mydroid/bionic/libc/bionic/dlmalloc.c:3896
    I/DEBUG   (  170):          #02 get_malloc_leak_info  /[your_path]/mydroid/bionic/libc/bionic/malloc_debug_common.c:168
    ./prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-objdump: '/[your_path]/xxxxxx
    ./prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-addr2line: '[your_path]/xxxxxx
    I/DEBUG   (  170):          #03 (unknown)  (unknown)
    I/DEBUG   (  170):          #04 dvmPlatformInvoke  DexDataMap.c:0
    I/DEBUG   (  170):
        这里明显可以看出adbs给出了有用的黑体部分的信息,即做了一些地址到具体程序函数名和行数的转换,方便我们定位问题。
    为了给大家看得更清楚,下面是单纯使用logcat看到的crash信息:
    11-02 17:18:40.438: INFO/DEBUG(170): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    11-02 17:18:40.438: INFO/DEBUG(170): Build fingerprint: 'tmous/htc_pyramid/pyramid:2.3.4/GRJ22/125597.1:user/release-keys'
    11-02 17:18:40.448: INFO/DEBUG(170): pid: 20715, tid: 20727  >>> [your product name]<<<
    11-02 17:18:40.448: INFO/DEBUG(170): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
    ...
    11-02 17:18:40.448: INFO/DEBUG(170):  scr 80000010
    11-02 17:18:40.618: INFO/DEBUG(170):          #00  pc 000161c8  /system/lib/libc.so (__libc_android_abort)
    11-02 17:18:40.618: INFO/DEBUG(170):          #01  pc 00013bf0  /system/lib/libc.so (dlfree)
    11-02 17:18:40.618: INFO/DEBUG(170):          #02  pc 00014a72  /system/lib/libc.so (free)
    11-02 17:18:40.618: INFO/DEBUG(170):          #03  pc 0000664e  [your crash app name]
    11-02 17:18:40.618: INFO/DEBUG(170):          #04  pc 00011e74  /system/lib/libdvm.so
    11-02 17:18:40.618: INFO/DEBUG(170): code around pc:
    11-02 17:18:40.618: INFO/DEBUG(170): afd161a8 2c006824 e028d1fb b13368db c064f8df

    http://blog.csdn.net/melody_lu123/article/details/6929292

  • 相关阅读:
    模仿Linux内核kfifo实现的循环缓存
    FFmpeg + SoundTouch实现音频的变调变速
    C++标准库实现WAV文件读写
    PHP写的一个轻量级的DI容器类(转)
    android App抓包工具的应用(转)
    Dell 服务器阵列扩容【经验分享(转)】
    hexo静态博客的安装及应用实践记录
    centos 6.5 升级php到5.6.17版本
    前端框架记录
    Virtual DOM 虚拟DOM的理解(转)
  • 原文地址:https://www.cnblogs.com/eustoma/p/2473365.html
Copyright © 2020-2023  润新知