57 lines
1.1 KiB
C++
57 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
#include <stdio.h>
|
|
#include <execinfo.h>
|
|
#include <signal.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <iostream>
|
|
|
|
#define BT_BUF_SIZE 100
|
|
|
|
using namespace std;
|
|
|
|
namespace TraceUtils {
|
|
struct StackTraceElement {
|
|
public:
|
|
StackTraceElement(int elementIndex, void *offset,string file,string symbol);
|
|
|
|
int elementIndex;
|
|
|
|
void *offset;
|
|
string file;
|
|
|
|
string symbol;
|
|
|
|
|
|
string getFunctionName();
|
|
string getSourceFile();
|
|
int getSourceLine();
|
|
|
|
private:
|
|
int symbolLoadState = 0;
|
|
|
|
string fnName;
|
|
string srcFile;
|
|
int srcLine;
|
|
|
|
void loadSymbols();
|
|
};
|
|
|
|
struct StackTrace {
|
|
public:
|
|
explicit StackTrace(int size);
|
|
~StackTrace();
|
|
|
|
const StackTraceElement** elements;
|
|
const int stackSize;
|
|
|
|
void printStackTrace();
|
|
|
|
void printStackTrace(std::function<void(StackTraceElement*)> format);
|
|
};
|
|
|
|
extern StackTrace backTrace(int size);
|
|
};
|