1. Java layer
StackTraceElement st[]= Thread.currentThread().getStackTrace();
for (StackTraceElement s : st) {
Log.d(TAG, s.toString());
}
or:
java.util.Map<Thread, StackTraceElement[]> ts = Thread.getAllStackTraces();
StackTraceElement[] ste = ts.get(Thread.currentThread());
for (StackTraceElement s : ste) {
Log.d(TAG, s.toString());
}
2. Native C++
#include <utils/CallStack.h>
...
CallStack stack;
stack.update();
stack.log(TAG, ANDROID_LOG_INFO
, "");
android.mk里加上
LOCAL_SHARED_LIBRARIES := libutils (或加在后面)
3. Kernel layer
#include <linux/bug.h>
WARN(1, “call stack\n”);