Debug.hpp
Go to the documentation of this file.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
00030
00031
00032
00033
00034
00035
00036 #ifndef DEBUG_HPP_
00037 #define DEBUG_HPP_
00038
00039 #include <iostream>
00040 #include <cassert>
00041 #include <sstream>
00042 #include <string>
00043 #include "PetscTools.hpp"
00044
00055 std::string FormDebugHead();
00060 void PrintTheStack();
00061
00066 #define TRACE(stuff) std::cout << FormDebugHead() << stuff << std::endl << std::flush;
00067
00069 #define MARK std::cout << FormDebugHead() << __FILE__ << " at line " << __LINE__ << std::endl << std::flush;
00070
00073 #define PRINT_VARIABLE(var) std::cout << FormDebugHead() << #var " = " << var << std::endl << std::flush;
00074
00079 #define PRINT_2_VARIABLES(var1,var2) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00080 #var2 " = " << var2 << std::endl << std::flush;
00081
00087 #define PRINT_3_VARIABLES(var1,var2,var3) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00088 #var2 " = " << var2 << ", " #var3 " = " << var3 << std::endl << std::flush;
00089
00096 #define PRINT_4_VARIABLES(var1,var2,var3,var4) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00097 #var2 " = " << var2 << ", " #var3 " = " << var3 << ", " \
00098 #var4 " = " << var4 << std::endl << std::flush;
00099
00107 #define PRINT_5_VARIABLES(var1,var2,var3,var4,var5) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00108 #var2 " = " << var2 << ", " #var3 " = " << var3 << ", " \
00109 #var4 " = " << var4 << ", " #var5 " = " << var5 <<std::endl << std::flush;
00110
00113 #define QUIT_AFTER_N_VISITS(n) { static unsigned counter=0; if (++counter==(n)) {TRACE("User-forced quit."); assert(0);} }
00114
00117 #define HOW_MANY_TIMES_HERE(message) { \
00118 static unsigned counter=1; \
00119 std::cout << FormDebugHead() << "Num times here (" << message << "): " << counter++ << std::endl << std::flush; }
00120
00124 #define TRACE_FROM_NTH_VISIT(stuff,n) { \
00125 static unsigned counter=0; \
00126 if (++counter>=(n)) {TRACE(stuff<<" (visit "<<counter<<")");} }
00127
00130 #define PRINT_VECTOR(v) \
00131 { std::cout << FormDebugHead() << #v " = {"; \
00132 for (unsigned _i=0; _i<v.size(); _i++) { \
00133 std::cout << (_i==0?"":",") << v[_i]; } \
00134 std::cout << "}" << std::endl << std::flush; }
00135
00146 #define MARK_IN_ORDER PetscTools::BeginRoundRobin(); MARK; PetscTools::EndRoundRobin();
00147
00151 #define STACK PrintTheStack();
00152
00153 #endif