Android使用addr2line工具查看堆栈信息

Android 5.1 使用addr2line工具定位Native Crash

Android O源码中为了区分不同的厂商vendor引入了HAL,我们在分析从hardware层静态代码时,很难捋清楚从framework层到hardware层的代码执行流程。基于此,我们可在对应cpp文件中通过打印堆栈信息,从而帮助我们快速定位代码执行流程。

Android cpp文件中打印堆栈信息
  • Android.mk文件中添加
    LOCAL_C_INCLUDES += $(TOP)/frameworks/native/include/
    LOCAL_SHARED_LIBRARIES += libcutils libutils

  • 在源码中添加
    void fun()
    {

    android::CallStack Stack(“testStack”);

    }

分析定位堆栈信息
  • 具体backtrace堆栈信息
    #08 pc 0000000000002120 /system/lib64/libxxx_xxx_jni.so
    #09 pc 00000000000024c4 /system/lib64/libxxx_xxx_jni.so (_ZN13TheftListener9OnCmdProcEtRKSt6vectorIhSaIhEE+280)
    #10 pc 0000000000003b00 /system/lib64/libxxxservice_xxx.so (_ZN15SVPTheftService9OnCmdProcEtRKSt6vectorIhSaIhEE+1608)
  • 使用addr2line分析定位具体文件
    在Android源码路径下,执行如下命令:
    addr2line -ae out/target/product/xxx/obj/SHARED_LIBRARIEX/XXX/libxxx_xxx_jni.so 00000000000024c4
    打印如下图,堆栈信息就能定位到某个文件的具体行数

在这里插入图片描述在这里插入图片描述
如此一来, 能快速梳理 Android 项目中代码调用流程,并定位BUG 。

需要注意:
1,注意调试文件的位置在obj目录下,并非libs目录下生成的so文件
2,00000000000024c4为出错的机制位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值