Example 1: printing the location that a function was called from:
#ifdef CWDEBUG // Get the location that we were called from. libcwd::location_ct 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
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 demangle_symbol costs cpu every time you call it, but using type_info_of<> does not cost any cpu: the demangling is done once, during the initialization of libcwd; type_info_of<> merely returns a static pointer.
Copyright © 2001 - 2004 Carlo Wood. All rights reserved.