1 Linux Kernel
Kernel里最简单,直接有几现成的函数可以使用:
dump_stack() 这个函数打出当前堆栈和函数调用backtrace后接着运行
WARN_ON(x) 这个函数跟dump_stack很像,它有个条件,如果条件满足了就把stack打出来。
打印出来的结果都在kernel log里,一般dmesg命令就可以看到了
2. Native C++
+++ b/Android.mk
+LOCAL_SHARED_LIBRARIES += libcutils libutils
+LOCAL_SHARED_LIBRARIES += libutilscallstack
+#include<utils/CallStack.h>
android::CallStack stack("[stack]");
3. Native C
一个简单方法是用C语言调C++的函数,对,就是extern “C”。
先在项目里加入一个c++文件,比如callstack.cpp,里面是:
#include <utils/CallStack.h> extern "C" void dumping_callstack(void); void dumping_callstack(void) { android::CallStack cs("My CallStack Debug"); }
在项目里再加入一个c++的头文件,比如callstack.h,里面是:
void dumping_callstack(void);
在Android.mk里源文件列表LOCAL_SRC_FILES里加入callstack.cpp,并确保libutilscallstack在依赖列表里。
在native C里include callstack.h后直接调用dumping_callstack()就可以了。
4. Java
Java最简单,它的backtrace最详细,连文件名和行号都打出来了:
Exception e = new Exception("haha");
e.printStackTrace();
log在logcat里看以看到。
大部分内容转自:
http://blog.sina.com.cn/s/blog_7213e0310102wtge.html
https://www.cnblogs.com/ArsenalfanInECNU/p/14510304.html