Functions

  • bool Demangle (const char * mangled, char * out, size_t out_size)

    Demangle `mangled`. On success, return true and write the

    demangled symbol name to `out`. Otherwise, return false.

    `out` is modified even if demangling is unsuccessful.

    This function provides an alternative to libstdc++'s abi::__cxa_demangle,

    which is not async signal safe (it uses malloc internally). It's intended to

    be used in async signal handlers to symbolize stack traces.

    Note that this demangler doesn't support full demangling. More

    specifically, it doesn't print types of function parameters and

    types of template arguments. It just skips them. However, it's

    still very useful to extract basic information such as class,

    function, constructor, destructor, and operator names.

    See the implementation note in demangle.cc if you are interested.

    Example:

    | Mangled Name | Demangle | DemangleString

    |---------------|-------------|-----------------------

    | _Z1fv | f() | f()

    | _Z1fi | f() | f(int)

    | _Z3foo3bar | foo() | foo(bar)

    | _Z1fIiEvi | f

    <

    >() | void f

    <int

    >(int)

    | _ZN1N1fE | N::f | N::f

    | _ZN3Foo3BarEv | Foo::Bar() | Foo::Bar()

    | _Zrm1XS_" | operator%() | operator%(X, X)

    | _ZN3FooC1Ev | Foo::Foo() | Foo::Foo()

    | _Z1fSs | f() | f(std::basic_string

    <char

    ,

    | | | std::char_traits

    <char

    >,

    | | | std::allocator

    <char

    > >)

    See the unit test for more examples.

    Note: we might want to write demanglers for ABIs other than Itanium

    C++ ABI in the future.

  • std::string DemangleString (const char * mangled)

    A wrapper around `abi::__cxa_demangle()`. On success, returns the demangled

    name. On failure, returns the input mangled name.

    This function is not async-signal-safe.