首先,先进入需要添加堆栈的进程代码,并在其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侧的调用堆栈打印比较简单,直接在需要打印的地方添加如下代码即可
RemoteException exp = new RemoteException("java"); exp.printStackTrace();