打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
How to Print Function Caller Stack in Android Log File

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android Native 内存泄漏系统化解决方案
367,二叉树的最大深度
(6)Android Native/Tombstone Crash Log 详细分析[原创]
如何定位Android NDK开发中遇到的错误
Android下面打印进程函数调用堆栈(dump backtrace)的方法
ruby中异常处理笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服