123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #include "sys.hpp"
- #include "debug.hpp"
- #include <stdlib.h>
- #ifdef CWDEBUG
- namespace objsim { // >
- namespace debug { // >--> This part must match DEBUGCHANNELS, see debug.h
- namespace channels { // >
- namespace dc {
- // Add new debug channels here.
- channel_ct custom ("CUSTOM");
- channel_ct layer ("LAYER");
- channel_ct simloop("SIMLOOP");
- channel_ct element("ELEMENT");
- channel_ct con ("CONNECTION");
- channel_ct input ("INPUT");
- channel_ct smod ("SIMMODULE");
- channel_ct anyopt ("ANYOPT");
- channel_ct learn ("LEARN");
- channel_ct main ("MAIN");
- channel_ct para ("PARASCAN");
- channel_ct utils ("UTILS");
- channel_ct chunk ("CHUNKFILE");
- } // namespace dc
- } // 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.
- Debug(dc::bfd.off());
- Debug(dc::malloc.off());
- #endif
- // 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());
- #if LIBCWD_THREAD_SAFE
- 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));
- #else
- Debug(libcw_do.set_ostream(&std::cout));
- #endif
- // Write a list of all existing debug channels to the default debug device.
- Debug(list_channels_on(libcw_do));
- }
- // Initialize debugging code from main().
- void init(void)
- {
- // You want this, unless you mix streams output with C output.
- // Read http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#8 for an explanation.
- // We can't use it, because other code uses printf to write to the console.
- #if 0
- Debug(set_invisible_on());
- std::ios::sync_with_stdio(false); // Cause "memory leaks" ([w]cin, [w]cout and [w]cerr filebuf allocations).
- Debug(set_invisible_off());
- #endif
- // This will warn you when you are using header files that do not belong to the
- // shared libcwd object that you linked with.
- Debug(check_configuration());
- #if CWDEBUG_ALLOC
- // Remove all current (pre- main) allocations from the Allocated Memory Overview.
- libcwd::make_all_allocations_invisible_except(NULL);
- #endif
- Debug(read_rcfile());
- init_thread();
- }
- } // namespace debug
- } // namespace myproject
- void turnOnAllDebug()
- {
- // Turn on debug object `libcw_do'.
- Debug( libcw_do.on() );
-
- // Turn on all debug channels that are off.
- ForAllDebugChannels(
- if (!debugChannel.is_on())
- debugChannel.on();
- );
-
- Debug( dc::malloc.off() );
- Debug( dc::bfd.off() );
-
- // Print a listing of all debug channels to debug object `libcw_do'.
- Debug( list_channels_on(libcw_do) );
-
- }
- void turnOffAllDebug()
- {
- // Turn on all debug channels that are off.
- ForAllDebugChannels(
- if (debugChannel.is_on())
- debugChannel.off();
- );
-
- // Print a listing of all debug channels to debug object `libcw_do'.
- Debug( list_channels_on(libcw_do) );
- }
- #endif // CWDEBUG
|