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()));