- kernel层
linux kernel中有堆栈打印的API接口dump_stack,直接调用即可;dump_stack的实现在kernel中的msm-3.18/lib/dump_stack.c
和msm-3.18/kernel/printk/printk.c。
//在需要打印的堆栈信息的函数中加入即可
dump_stack();
- c文件中打印
c语言中的堆栈信息打印,需要自己实现接口,接口的实现如下代码,如下代码可以拿起来直接用
/*
如果android.mk中没有定义libdl,须加入;
LOCAL_SHARED_LIBRARIES += libdl
*/
#define MAX_DEPTH 31
//#define MAX_BACKTRACE_LINE_LENGTH 800
#define PATH "/system/lib/libcorkscrew.so"
#include "../../../../../../../../../../system/core/include/corkscrew/backtrace.h"
#include <dlfcn.h>
typedef ssize_t (*unwindFn)(backtrace_frame_t*, size_t, size_t);
typedef void (*unwindSymbFn)(const backtrace_frame_t*, size_t, backtrace_symbol_t*);
typedef void (*unwindSymbFreeFn)(backtrace_symbol_t*, size_t);
static void *gHandle = NULL;
static int getCallStack(void){
ssize_t i = 0;
ssize_t result = 0;
ssize_t count;
backtrace_frame_t mStack[MAX_DEPTH];
backtrace_symbol_t symbols[MAX_