分享

How to Print Function Caller Stack in Android L... | Freescale Community

 老匹夫 2015-06-16

Print caller stack may help you to analyze the program and find out the caller stack more easily.

 

You can write your code like this:

 

Java:

     Exception e = new Exception();

     Log.e(TAG,"xxx",e);

 

C++ file:

      #include <utils/Callstack.h>

 

     android::CallStack stack;

     stack.update(1,30);

     stacn.dump("xxx");

 

Then you can see the function's caller stack in Android main log file.

 

C file:

#include <corkscrew/backtrace.h>

 

#define MAX_DEPTH 31
#define MAX_BACKTRACE_LINE_LENGTH 800

static backtrace_frame_t mStack[MAX_DEPTH];
static size_t mCount;

 

void csupdate(int32_t ignoreDepth, int32_t maxDepth) {
    if (maxDepth > MAX_DEPTH) {
        maxDepth = MAX_DEPTH;
    }
    ssize_t count = unwind_backtrace(mStack, ignoreDepth + 1, maxDepth);
    mCount = count > 0 ? count : 0;
}

void csdump(const char* prefix)\
{
size_t i = 0;
    backtrace_symbol_t symbols[MAX_DEPTH];

    get_backtrace_symbols(mStack, mCount, symbols);

 

    for (i = 0; i < mCount; i++) {
        char line[MAX_BACKTRACE_LINE_LENGTH];
        format_backtrace_line(i, &mStack[i], &symbols[i],
                line, MAX_BACKTRACE_LINE_LENGTH);
        ALOGE("%s%s", prefix, line);
    }

 

    free_backtrace_symbols(symbols, mCount);
}

 

void myFunc()

{

     csupdate(1, 30);

     csdump("myprefix");

}

In Android.mk, add libcorkscrew, as below

LOCAL_SHARED_LIBRARIES := libxxx libyyy libcorkscrew

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多