00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef DEBUG_HPP_
00030 #define DEBUG_HPP_
00031
00032 #include <iostream>
00033 #include <cassert>
00034 #include "PetscTools.hpp"
00035 #include <sstream>
00036
00042 std::string FormDebugHead();
00043
00044 #ifndef NDEBUG
00045
00046 #define TRACE(stuff) std::cout << FormDebugHead() << stuff << std::endl << std::flush;
00047
00049 #define MARK std::cout << FormDebugHead() << __FILE__ <<" at line "<<__LINE__<< std::endl << std::flush;
00050
00052 #define PRINT_VARIABLE(var) std::cout << FormDebugHead() << #var " = " << var << std::endl << std::flush;
00053 #define PRINT_VARIABLES(var1,var2) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00054 #var2 " = " << var2 << std::endl << std::flush;
00055 #define PRINT_3_VARIABLES(var1,var2,var3) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00056 #var2 " = " << var2 << ", " #var3 " = " << var3 << std::endl << std::flush;
00057 #define PRINT_4_VARIABLES(var1,var2,var3,var4) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00058 #var2 " = " << var2 << ", " #var3 " = " << var3 << ", " \
00059 #var4 " = " << var4 << std::endl << std::flush;
00060 #define PRINT_5_VARIABLES(var1,var2,var3,var4,var5) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00061 #var2 " = " << var2 << ", " #var3 " = " << var3 << ", " \
00062 #var4 " = " << var4 << ", " #var5 " = " << var5 <<std::endl << std::flush;
00063
00065 #define QUIT_AFTER_N_VISITS(n) { static unsigned counter=0; if (++counter==(n)) {TRACE("User-forced quit."); assert(0);} }
00066
00068 #define HOW_MANY_TIMES_HERE(message) { \
00069 static unsigned counter=1; \
00070 std::cout << FormDebugHead()<<"Num times here ("<< message << "): " << counter++ << std::endl << std::flush; }
00071
00073 #define TRACE_FROM_NTH_VISIT(stuff,n) { \
00074 static unsigned counter=0; \
00075 if (++counter>=(n)) {TRACE(stuff<<" (visit "<<counter<<")");} }
00076
00078 #define PRINT_VECTOR(v) \
00079 { std::cout << FormDebugHead() << #v " = {"; \
00080 for (unsigned _i=0; _i<v.size(); _i++) { \
00081 std::cout << (_i==0?"":",") << v[_i]; } \
00082 std::cout << "}" << std::endl << std::flush; }
00083 #else
00084
00085 #define TRACE(stuff)
00086 #define PRINT_VARIABLE(var)
00087 #define PRINT_VARIABLES(var1,var2)
00088 #define PRINT_3_VARIABLES(var1,var2,var3)
00089 #define PRINT_4_VARIABLES(var1,var2,var3,var4)
00090 #define QUIT_AFTER_N_VISITS(n)
00091 #define HOW_MANY_TIMES_HERE(message)
00092 #define TRACE_FROM_NTH_VISIT(stuff,n)
00093 #define PRINT_VECTOR(v)
00094 #define MARK
00095 #endif
00096
00097
00098 #endif