linux系统与Android9以上及android8以下打印函数调用关系(callstack)

linux系统

#include <execinfo.h>
#define MAX_DEPTH (20)
void print_stackframe(void)
{
    void * buffer[MAX_DEPTH];
    int depth = backtrace(buffer, MAX_DEPTH);
    char ** func_names = backtrace_symbols(buffer, depth);
    for (int i=0; i<depth; i++)
    {
    printf(“Depth: %d, func name: %s\n”, i, func_names[i]);
    }
}

库依赖:部分人说需要加入rdynamic ,可视编译情况而定,本人编译没有加可以通过

android 系统 C++部分:

#include <utils/CallStack.h>  
using namespace android;

void print_stackframe(void)

{

    CallStack stack;  
    stack.update();  
    stack.log(printTag);

}

库依赖:android8及以下:libcutils

             android9及以上libutilscallstack

android 系统 java部分:

Log.d(TAG,Log.getStackTraceString(new Throwable()));  

点赞