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

# Setting The Output Destination
[Writing Debug Output]

Collaboration diagram for Setting The Output Destination:

## Related
| Custom Debug Objects
## Functions
void | libcwd::debug_ct::set_ostream (std::ostream *os)
| Set output device (single threaded applications).Assign a new `ostream` to this debug object (default is `std::cerr`). For use in single threaded applications only.
std::ostream * | libcwd::debug_ct::get_ostream (void) const
| Get the `ostream` device as set with set_ostream().
template<class T >
void | libcwd::debug_ct::set_ostream (std::ostream *os, T *mutex)
| Set output device and provide external lock.Assign a new `ostream` to this debug object. The `ostream` will only be written to after obtaining the lock that is passed as second argument. Each `ostream` needs to have a unique lock. If the application also writes directly to the same `ostream` then use the same lock.

## Detailed Description

Basically, a debug object (debug_ct ) is a pointer to an ostream with a few extra attributes added to give it an internal state for on (pass output on) and off (don't pass output on) as well as some formatting information of how to write the data that is passed on to its ostream.

The methods of debug_ct given here allow you to set or get this ostream (pointer).

## Function Documentation

template<class T >

void libcwd::debug_ct::set_ostream | ( | std::ostream * | os,
|  | T * | mutex |
| ) |  |  | `[inline, inherited]`

Set output device and provide external lock.Assign a new `ostream` to this debug object. The `ostream` will only be written to after obtaining the lock that is passed as second argument. Each `ostream` needs to have a unique lock. If the application also writes directly to the same `ostream` then use the same lock.

Example:

     MyLock lock;

     // Uses MyLock::lock(), MyLock::trylock() and MyLock::unlock().
     Debug( libcw_do.set_ostream(&std::cerr, &lock) );

     lock.lock();
     std::cerr << "The application uses cerr too\n";
     lock.unlock();