安卓源码中打印调用堆栈的方法

Native层打印调用堆栈

首先,先进入需要添加堆栈的进程代码,并在其Android.bp中添加shared_libs libutilscallstack

cc_library {
    name: "libbinder",
    ......
    shared_libs: [
        "liblog",
        "libcutils",
        "libutils",
		"libutilscallstack",
    ],
    ......
}

然后在对应的代码处添加

// 先添加头文件
#include <utils/CallStack.h>

// 引用对象
using ::android::CallStack;

Status ServiceManager::addService(const std::string& name, const sp<IBinder>& binder, bool allowIsolated, int32_t dumpPriority) {
    ......
    // 或者直接使用 CallStack stack("native");
    // 替换下述的三条语句,这样日志的等级为 ANDROID_LOG_DEBUG
    CallStack stack; 
    stack.update();
	stack.log("native", ANDROID_LOG_ERROR);
    ......
}

Java侧的调用堆栈打印

Java侧的调用堆栈打印比较简单,直接在需要打印的地方添加如下代码即可

RemoteException exp = new RemoteException("java");
exp.printStackTrace();

上一篇:递归与非递归打印二叉树


下一篇:栈的顺序存储