加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
StackTrace.cpp 1.17 KB
一键复制 编辑 原始数据 按行查看 历史
amylaogong 提交于 2021-04-02 15:47 . first
#include "StackTrace.h"
int StackTrace::a = 0;
StackTrace::StackTrace(){};
StackTrace::~StackTrace(){};
void StackTrace::show(const char* szBriefInfo)
{
static const int STACK_INFO_LEN = 1024;
static const int MAX_STACK_FRAMES = 12;
void *pStack[MAX_STACK_FRAMES];
static char szStackInfo[STACK_INFO_LEN * MAX_STACK_FRAMES];
char ** pStackList = NULL;
int frames = backtrace(pStack, MAX_STACK_FRAMES);
pStackList = backtrace_symbols(pStack, frames);
if (NULL == pStackList)
return;
strcpy(szStackInfo, szBriefInfo == NULL ? "stack traceback:\n" : szBriefInfo);
for (int i = 0; i < frames; ++i)
{
if (NULL == pStackList[i])
break;
strncat(szStackInfo, pStackList[i], STACK_INFO_LEN);
strcat(szStackInfo, "\n");
}
printf("%s", szStackInfo); // 输出到控制台,也可以打印到日志文件中
}
void StackTrace::backtraceFunc(){
show("111,backtrace is:\n");
auto printtrace1 = [&](const char* str){
show("222,backtrace is:\n");
return [&]{ return show(str); };
};
auto f = printtrace1("333,backtrace is:\n");
f();
}
void StackTrace::testBacktrace(){//测试调用栈信息
backtraceFunc();
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化