Android在Java层打印堆栈比较方便,代码如下:
try {
throw new Exception("Debug xxx call stack");
}catch(Exception e) {
e.printStackTrace();
}
但是在C++模块中能打印调用堆栈吗?怎么打印调用栈呢?
答案是肯定的,步骤如下:
1.修改编译脚本Andorid.mk或者Android.bp
Android.mk
LOCAL_SHARED_LIBRARIES := \
libutils \
libutilscallstack
Android.bp
shared_libs: [
"原来的内容",
"libutils",
"libutilscallstack",
],
2.修改c++文件,引入头文件,打印堆栈
#include <utils/CallStack.h>
void function() {
android::CallStack stack;
stack.update();
stack.log("function stack");
}
3.注意事项
如果C++文件定义了命令空间,请把#include <utils/CallStack.h>放在name space定义之外