android打印调用堆栈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android打印调用堆栈相关的知识,希望对你有一定的参考价值。

参考技术A 修改android.bp,加入callstack模块

注意这里android是命名空间,如果已经在android命名空间内则不需要写android::

Android打印堆栈的方法

打印调用堆栈可以直接把问题发生时的函数调用关系打出来,非常有利于理解函数调用关系,这个对源代码逻辑研究是很有帮助的。

Java

new Throwable().printStackTrace(); 

很简单。

Native C++

在mk中要添加下面的库:

LOCAL_SHARED_LIBRARIES := \\
      libutils \\
      libbinder \\

Android P上发现CallStack不在libutils,而是在libutilscallstack,故要改成:

LOCAL_SHARED_LIBRARIES := \\
      libutilscallstack \\

源码路径:/system/core/libutils/CallStack.cpp

包含下面头文件:

include <utils/CallStack.h>
include <binder/IPCThreadState.h>

执行下面方法打印堆栈信息:

CallStack cs("TAG");//打印堆栈信息

pid_t pid = IPCThreadState::self()->getCallingPid();
ALOGV("call pid %d", pid);//打印进程ID

好文推荐

以上是关于android打印调用堆栈的主要内容,如果未能解决你的问题,请参考以下文章

Android系统源码或内核中打印函数调用堆栈(打印堆栈)

Android系统源码或内核中打印函数调用堆栈(打印堆栈)

Android打印堆栈的方法

Android打印堆栈的方法

利用Xposed Hook打印Java函数调用堆栈信息的几种方法

手机调试Android程序出异常时不打印堆栈信息