29 #include <boost/format.hpp>
32 #if defined DEMANGLE_GCC
38 std::string
demangle(
const char* mangledSymbol) {
42 char* demangled_symbol_ =
43 abi::__cxa_demangle(mangledSymbol, 0, 0, &status);
47 throw std::runtime_error(
48 "out of memory when allocating buffer for demangling");
51 if (status == -2 || status == -3) {
52 throw InvalidMangledName(boost::str(boost::format(
53 "invalid mangled name: `%1%'") % mangledSymbol));
57 std::string demangled_symbol(demangled_symbol_);
58 free(demangled_symbol_);
60 return demangled_symbol;
67 #elif defined DEMANGLE_MSVC
73 std::string
demangle(
const char* mangled_symbol) {
75 return mangled_symbol;
86 std::string
demangle(
const char* mangled_symbol) {
87 return std::string(boost::str(boost::format(
"<cannot demangle %1%>")
99 std::string
demangle(
const std::string& mangled_symbol) {
100 return demangle(mangled_symbol.c_str());
std::string demangle(const char *mangled_symbol)
This function takes the mangled name of a symbol and returns the demangled name of the symbol...