1.用户空间打印调用栈
void *stack_addr[10];
int layer;
int i;
char **ppstack_funcs;
/* 通过调用libc函数实现 */
layer = backtrace(stack_addr, 10);
ppstack_funcs = backtrace_symbols(stack_addr, layer);
for(i = 0; i < layer; i++)
printf("\n%s:%p\n", ppstack_funcs[i], stack_addr[i]);
2.HAL层打印调用栈
#include <utils/CallStack.h>
android::CallStack stack;
stack.update(1);
stack.log("xxxtag");
Android Q之后的版本Android.mk中添加
LOCAL_SHARED_LIBRARIES += libutilscallstack
3.Kernel打印调用栈
Dump_stack();//void dump_stack(void)