码迷,mamicode.com
首页 > 移动开发 > 详细

android 下打印 backtrace

时间:2014-09-30 19:33:39      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:android

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

标签:android

原文地址:http://blog.csdn.net/span76/article/details/39697183

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!