libcwdversion 2.0.0
The C++ Debugging Support Library
Loading...
Searching...
No Matches
Introduction (Types And Symbols)

Introduction to resolving addresses to function and source locations and demangled names.

Libcwd reads the symbol table of the application and of each of the linked object files upon initialization.  It then allows you to translate program counter addresses to function names, source file names and line numbers.  You can also print demangled names of any symbol or type, making the debug output better human readable. 

Example 1: printing the location that a function was called from:

#ifdef CWDEBUG
// Get the location that we were called from.
libcwd::Location location((char*)__builtin_return_address(0)
+ libcwd::builtin_return_address_offset);
// Demangle the function name of the location that we were called from.
std::string demangled_function_name;
libcwd::demangle_symbol(location.mangled_function_name(), demangled_function_name);
// Print it.
Dout(dc::notice, "This function was called from " << demangled_function_name << '(' << location << ')');
#endif
A source file location.
Definition Location.h:58
#define Dout(cntrl,...)
Macro for writing debug output.
Definition debug.h:97
void demangle_symbol(char const *input, std::string &output)
Demangle mangled symbol name input and write the result to string output.
Definition demangle.cxx:814

Example 2: Printing the demangled name of the current (template) function:

// If we are in template Foo<TYPE>::f()
Dout(dc::notice, "We are in Foo<" << type_info_of<TYPE>().demangled_name() << ">::f()");

Note that calling libcwd::demangle_symbol costs cpu every time you call it, but using libcwd::type_info_of<> does not cost any cpu: the demangling is done once, during the initialization of libcwd; libcwd::type_info_of<> merely returns a static pointer.