NEURON
backtrace_utils.h
Go to the documentation of this file.
1 #pragma once
2 #if __has_include(<cxxabi.h>)
3 #include <cxxabi.h>
4 #endif
5 
6 #include <cstddef>
7 #include <memory>
8 #include <string>
9 
10 int parse_bt_symbol(char* backtrace_line, void** addr, char* symbol, char* offset);
11 int cxx_demangle(const char* symbol, char** funcname, std::size_t* funcname_sz);
12 /** @brief Try and demangle a string, return the original string on failure.
13  */
14 inline std::string cxx_demangle(const char* mangled) {
15 #if __has_include(<cxxabi.h>)
16  int status{};
17  // Note that the third argument to abi::__cxa_demangle returns the length of
18  // the allocated buffer, which may be larger than strlen(demangled) + 1.
19  std::unique_ptr<char, decltype(free)*> demangled{
20  abi::__cxa_demangle(mangled, nullptr, nullptr, &status), free};
21  return status ? mangled : demangled.get();
22 #else
23  return mangled;
24 #endif
25 }
26 
27 void backward_wrapper();
void backward_wrapper()
int parse_bt_symbol(char *backtrace_line, void **addr, char *symbol, char *offset)
int cxx_demangle(const char *symbol, char **funcname, std::size_t *funcname_sz)
return status