libcwd: The C++ Debugging Support Library - Reference Manual
Author: Carlo Wood
Description: C++ debugging support library with ostream debug output
Keywords: libcwd, debug output, debug facility, debug channel, object orientation, OO, C++, nested debug output, ostream, memory allocation, debugging, source file and line number

Main Page Reference Manual Namespace List Compound List Namespace Members Compound Members File Members

# Special Functions And Utilities
[Writing Debug Output]

Collaboration diagram for Special Functions And Utilities:

## Classes
class | libcwd::buf2str
| Print a (`char`) buffer with a given size to a debug ostream, escaping non-printable characters. More...
class | libcwd::char2str
| Print a `char` to a debug ostream, escaping non-printable characters as needed. More...
interface | libcwd::cwprint
| Print an object to a debug stream without needing an operator<<. More...
interface | libcwd::cwprint_using
| Print an object to an ostream using an arbitrary method of that object. More...
## Defines
#define | ForAllDebugChannels(STATEMENT...)
| Looping over all debug channels.
#define | ForAllDebugObjects(STATEMENT...)
| Looping over all debug objects.
## Functions
channel_ct * | libcwd::find_channel (char const *label)
| Find debug channel with label label.
void | libcwd::list_channels_on (debug_ct &debug_object)
| List all debug channels to a given debug object.

## Define Documentation

#define ForAllDebugChannels | ( | STATEMENT... |  | ) |

Looping over all debug channels.

The macro `ForAllDebugChannels` allows you to run over all debug channels.

For example,

     ForAllDebugChannels( while (!debugChannel.is_on()) debugChannel.on() );

which turns all channels on. And

     ForAllDebugChannels( if (debugChannel.is_on()) debugChannel.off() );

which turns all channels off.

#define ForAllDebugObjects | ( | STATEMENT... |  | ) |

Looping over all debug objects.

The macro `ForAllDebugObjects` allows you to run over all debug objects.

For example,

     ForAllDebugObjects( debugObject.set_ostream(&std::cerr, &cerr_mutex) );

would set the output stream of all debug objects to `std::cerr`.

## Function Documentation

channel_ct * libcwd::find_channel | ( | char const * | label | ) |

Find debug channel with label label.

Returns:
  A pointer to the debug channel object whose name starts with label. If there is more than one such debug channel, the object with the lexicographically largest name is returned. When no debug channel could be found, NULL is returned.

void libcwd::list_channels_on | ( | debug_ct & | debug_object | ) |

List all debug channels to a given debug object.

Example:

     Dout( list_channels_on(libcw_do) );   // libcw_do is the (default) debug object of libcwd.

Example of output:

     DEBUG   : Disabled
     NOTICE  : Enabled
     WARNING : Enabled
     SYSTEM  : Enabled
     MALLOC  : Disabled
     LLISTS  : Disabled
     KERNEL  : Disabled
     IO      : Disabled
     FOO     : Enabled
     BAR     : Enabled

Where FOO and BAR are user defined channels in this example.

References libcwd::channels::dc::always, libcwd::channels::dc::bfd, libcwd::channels::dc::malloc, libcwd::debug_ct::margin(), libcwd::noprefix_cf, libcwd::channel_ct::off(), and libcwd::channel_ct::on().