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 <sstream>
00035 #include <string>
00036 #include "PetscTools.hpp"
00037
00048 std::string FormDebugHead();
00049
00054 #define TRACE(stuff) std::cout << FormDebugHead() << stuff << std::endl << std::flush;
00055
00057 #define MARK std::cout << FormDebugHead() << __FILE__ << " at line " <<__LINE__ << std::endl << std::flush;
00058
00061 #define PRINT_VARIABLE(var) std::cout << FormDebugHead() << #var " = " << var << std::endl << std::flush;
00062
00066 #define PRINT_2_VARIABLES(var1,var2) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00067 #var2 " = " << var2 << std::endl << std::flush;
00068
00073 #define PRINT_3_VARIABLES(var1,var2,var3) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00074 #var2 " = " << var2 << ", " #var3 " = " << var3 << std::endl << std::flush;
00075
00081 #define PRINT_4_VARIABLES(var1,var2,var3,var4) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00082 #var2 " = " << var2 << ", " #var3 " = " << var3 << ", " \
00083 #var4 " = " << var4 << std::endl << std::flush;
00084
00091 #define PRINT_5_VARIABLES(var1,var2,var3,var4,var5) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00092 #var2 " = " << var2 << ", " #var3 " = " << var3 << ", " \
00093 #var4 " = " << var4 << ", " #var5 " = " << var5 <<std::endl << std::flush;
00094
00097 #define QUIT_AFTER_N_VISITS(n) { static unsigned counter=0; if (++counter==(n)) {TRACE("User-forced quit."); assert(0);} }
00098
00101 #define HOW_MANY_TIMES_HERE(message) { \
00102 static unsigned counter=1; \
00103 std::cout << FormDebugHead() << "Num times here (" << message << "): " << counter++ << std::endl << std::flush; }
00104
00108 #define TRACE_FROM_NTH_VISIT(stuff,n) { \
00109 static unsigned counter=0; \
00110 if (++counter>=(n)) {TRACE(stuff<<" (visit "<<counter<<")");} }
00111
00114 #define PRINT_VECTOR(v) \
00115 { std::cout << FormDebugHead() << #v " = {"; \
00116 for (unsigned _i=0; _i<v.size(); _i++) { \
00117 std::cout << (_i==0?"":",") << v[_i]; } \
00118 std::cout << "}" << std::endl << std::flush; }
00119
00120 #endif