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