author Dmitriy Morozov <>
Fri, 12 Jan 2007 12:49:29 -0500
changeset 12 0239c3f0a598
parent 5 ee9052408c40
permissions -rw-r--r--
Options read from home or config directories; documentation built by default

#include "sys.h"
#include "debug.h"

#ifdef CWDEBUG

namespace dionysus
	namespace debug 
		namespace channels 		// DEBUGCHANNELS is set to this in debug.h
			namespace dc 
		        // Add new debug channels here.
				channel_ct filtration("FILTRATION");
				channel_ct transpositions("TRANSPOS");
				channel_ct vineyard("VINEYARD");
				channel_ct cycle("CYCLE");
				channel_ct lsfiltration("LSFILTRATION");
				channel_ct orderlist("ORDERLIST");
    	} // namespace DEBUGCHANNELS

		// Initialize debugging code from new threads.
		void init_thread(void)
			// Everything below needs to be repeated at the start of every
			// thread function, because every thread starts in a completely
			// reset state with all debug channels off etc.
			#if LIBCWD_THREAD_SAFE		// For the non-threaded case this is set by the rcfile.
			// Turn on all debug channels by default.
			ForAllDebugChannels(while(!debugChannel.is_on()) debugChannel.on());
			// Turn off specific debug channels.
			// Turn on debug output.
			// Only turn on debug output when the environment variable SUPPRESS_DEBUG_OUTPUT is not set.
			Debug(if (getenv("SUPPRESS_DEBUG_OUTPUT") == NULL) libcw_do.on());
			Debug(libcw_do.set_ostream(&std::cout, &cout_mutex));
			// Set the thread id in the margin.
			char margin[12];
			sprintf(margin, "%-10lu ", pthread_self());
			Debug(libcw_do.margin().assign(margin, 11));
			// Write a list of all existing debug channels to the default debug device.
		// Initialize debugging code from main().
		void init(void)
			// You want this, unless you mix streams output with C output.
			// Read for an explanation.
			// We can't use it, because other code uses printf to write to the console.

			// This will warn you when you are using header files that do not belong to the
			// shared libcwd object that you linked with.
			// Remove all current (pre- main) allocations from the Allocated Memory Overview.
	} // namespace debug
} // namespace dionysus

#endif // CWDEBUG