Android 使用 addr2line 查看堆栈信息

Android 源码为了区分不同的厂商 vendor 引入了 HAL 。 我们在读 hardware 层静态代码时,很难捋清楚从 framework 层到 hardware 层的代码执行流程。 

 

通过打印堆栈信息,能帮助我们快速定位代码执行流程。

 

Android CPP 打印堆栈信息

Android.mk 中添加

LOCAL_C_INCLUDES += $(TOP)/frameworks/native/include/

LOCAL_SHARED_LIBRARIES += libcutils libutils

 在源码中添加:

void func()
{
    ...
    android::CallStack Stack("testStack");
    ...
}

 

定位堆栈信息

例如: log

#06 pc 0000d24b  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+274)
#07 pc 0004769f  /system/lib/libc.so (__pthread_start(void*)+22)
#08 pc 0001b015  /system/lib/libc.so (__start_thread+32)

在 Android 源码编译环境执行如下命令:

addr2line -ae out/target/product/xxx/symbols/system/lib/libc.so 0001b015

打印如下图所示, 堆栈信息能定位到某个文件的哪一行。 

如此一来, 能快速梳理 Android 项目中代码调用流程,并定位BUG 。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值