首页 > 代码库 > android 下打印 backtrace
android 下打印 backtrace
Android 下面没有 execinfo.h, 就不能用在 glibc下打印 back trace 方法了。
glic 下打印 back trace 参见:http://blog.csdn.net/span76/article/details/11927551
我写了下面的方法,供参考:
#include <signal.h> #include <corkscrew/backtrace.h> static void pnpDumpNativeStack(int sig) { #if defined(HAVE_ANDROID_OS) || (defined(HAVE_ALIEN) && !defined(ALIEN_LIBC)) const size_t MAX_DEPTH = 32; backtrace_frame_t backtrace[MAX_DEPTH]; ssize_t frames = unwind_backtrace_thread(tid, backtrace, 0, MAX_DEPTH); if (frames > 0) { backtrace_symbol_t backtrace_symbols[MAX_DEPTH]; get_backtrace_symbols(backtrace, frames, backtrace_symbols); for (size_t i = 0; i < size_t(frames); i++) { char line[MAX_BACKTRACE_LINE_LENGTH]; format_backtrace_line(i, &backtrace[i], &backtrace_symbols[i], line, MAX_BACKTRACE_LINE_LENGTH); ALOGE("================== %s\n", line); } free_backtrace_symbols(backtrace_symbols, frames); } #endif } ... void dvmCollectGarbageInternal(const GcSpec* spec) { signal(SIGSEGV, pnpDumpNativeStack); ...
Android 是利用 libcorkscrew 提供的类似 execinfo 中方法获取 backtrace 信息。
遗憾的是,我每次打印都打印不全,比如下面就2条,原因有待查明。
09-30 03:38:49.821 137 137 E dalvikvm: ================== #00 pc 00026edb /../system/lib/libdvm.so
09-30 03:38:49.821 137 137 E dalvikvm: ================== #01 pc 00000400 [vdso]
android 下打印 backtrace
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。