Java打印
// 方式一
Exception e = new Exception("Audio");
e.printStackTrace();
// 方式二
Log.i("Audio", Log.getStackTraceString(new Throwable()));
Native C++
#include <utils/CallStack.h>
……
android::CallStack cs("Audio");
……
注意:新版本的 callstack 类放入了新的so中,因此可能会报找不到Callstack的错:
error: undefined symbol: android::CallStack::CallStack(char const*, int)
>>> referenced by xxxxxxxxxx
在mk/bp文件中加入新的so即可:
LOCAL_SHARED_LIBRARIES += libutilscallstack
Native C
通过extern “C”,C语言调用C++方法,利用CallStack完成。
// 创建C++文件,如callstack.cpp
#include <utils/CallStack.h>
extern "C" void dumping_callstack(void);
void dumping_callstack(void) {
android::CallStack cs("Audio");
}
// =============================================
// 创建头文件,如callstack.h
void dumping_callstack(void);
callstack.cpp 加入编译:
// 在 mk/bp 文件的 LOCAL_SRC_FILES 里加入callstack.cpp,LOCAL_SHARED_LIBRARIES中加入libutils
LOCAL_SRC_FILES += callstack.cpp
LOCAL_SHARED_LIBRARIES += libutils
调用打印:
#include "callstack.h"
...
dumping_callstack();
...