跟踪Android callback 调用堆栈

本文介绍了在调试Android系统时如何追踪回调堆栈,包括Java层通过捕获异常使用Log.getStackTraceString打印堆栈,使用ndk-stack工具结合符号表分析,以及使用panic.py脚本进行详细调用堆栈分析。这些方法对于定位和解决问题非常有帮助。
摘要由CSDN通过智能技术生成

0 在调试 android  系统时可以通过打印调用堆栈 callback stack 来分析和解决android问题。

1 java 层打印callback stack 可以通过 catch exception 然后 使用 Log.w(LOGTAG, Log.getStackTraceString(throwable)) 打印调用堆栈

Throwable throwable = new Throwable();   
        Log.w(LOGTAG, Log.getStackTraceString(throwable));
或者

            try {
                wait();
            } catch (InterruptedException e) {
                Log.e(LOGTAG, "Caught exception while waiting for overrideUrl");
                Log.e(LOGTAG, Log.getStackTraceString(e));
            }

2 c/c++, 通常情况下,可以通过segment fault 等错误即信号 SIGSEGV(11) 做出相应处理,即设置SIGSEGV的handler调用libc的backtrace,即可打印对于的callback stack;定位问题所在;但在android 中, bionic 不提供类似功能,而且只能通过logcat才能看到log信息,但是我们也可以根据android出错信息获得调用堆栈信息,如以下出错信息:

    D/CallStack( 2029): #00  pc 00008156  /system/lib/hw/audio.primary.tf4.so
    D/CallStack( 2029): #01  pc 000089e8  /system/lib/hw/audio.primary.tf4.so (android_audio_legacy::AudioHardware::AudioStreamOutALSA::setParameters(android::String const&)+139)
    D/CallStack( 2029): #02  pc 0000b2ca  /system/lib/hw/audio.primary.tf4.so
    D/CallStack( 2029): #03  pc 0003ac6a  /system/lib/libaudioflinger.so (android::AudioFlinger::Mix
  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值