4 #include "backward.hpp"
15 int parse_bt_symbol(
char* backtrace_line,
void** addr,
char* symbol,
char* offset) {
18 std::regex btline(
"(\\d+)\\s+([\\w\\.]+)\\s+(0x[\\da-f]+)\\s+(\\w+)\\s+\\+\\s+(\\d+)");
24 std::regex btline(
"([\\w\\.\\/]+)\\((\\w*)\\+(0x[\\da-f]+)\\)\\s+\\[(0x[\\da-f]+)\\]");
30 std::cmatch backtrace_match;
31 if (std::regex_search(backtrace_line, backtrace_match, btline)) {
32 *addr =
reinterpret_cast<void*
>(std::stoul(backtrace_match[ADDR].str(),
nullptr, 16));
33 std::strcpy(symbol, backtrace_match[
SYMBOL].str().c_str());
34 std::strcpy(offset, backtrace_match[OFFSET].str().c_str());
35 backtrace_line[backtrace_match.position(OBJPOS) - 1] =
'\0';
42 int cxx_demangle(
const char* symbol,
char** funcname,
size_t* funcname_sz) {
43 #if __has_include(<cxxabi.h>)
45 char* ret = abi::__cxa_demangle(symbol, *funcname, funcname_sz, &
status);
57 backward::StackTrace st;
int cxx_demangle(const char *symbol, char **funcname, size_t *funcname_sz)
int parse_bt_symbol(char *backtrace_line, void **addr, char *symbol, char *offset)