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
00071 #define MARK_ON_PROCESS(proc) if (PetscTools::GetMyRank()==proc) std::cout << FormDebugHead() << __FILE__ << " at line " << __LINE__ << std::endl << std::flush;
00072
00074 #define PRINT_VARIABLE(var) std::cout << FormDebugHead() << #var " = " << var << std::endl << std::flush;
00075
00080 #define PRINT_2_VARIABLES(var1,var2) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00081 #var2 " = " << var2 << std::endl << std::flush;
00082
00088 #define PRINT_3_VARIABLES(var1,var2,var3) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00089 #var2 " = " << var2 << ", " #var3 " = " << var3 << std::endl << std::flush;
00090
00097 #define PRINT_4_VARIABLES(var1,var2,var3,var4) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00098 #var2 " = " << var2 << ", " #var3 " = " << var3 << ", " \
00099 #var4 " = " << var4 << std::endl << std::flush;
00100
00108 #define PRINT_5_VARIABLES(var1,var2,var3,var4,var5) std::cout << FormDebugHead() << #var1 " = " << var1 << ", " \
00109 #var2 " = " << var2 << ", " #var3 " = " << var3 << ", " \
00110 #var4 " = " << var4 << ", " #var5 " = " << var5 <<std::endl << std::flush;
00111
00114 #define QUIT_AFTER_N_VISITS(n) { static unsigned counter=0; if (++counter==(n)) {TRACE("User-forced quit."); assert(0);} }
00115
00118 #define HOW_MANY_TIMES_HERE(message) { \
00119 static unsigned counter=1; \
00120 std::cout << FormDebugHead() << "Num times here (" << message << "): " << counter++ << std::endl << std::flush; }
00121
00125 #define TRACE_FROM_NTH_VISIT(stuff,n) { \
00126 static unsigned counter=0; \
00127 if (++counter>=(n)) {TRACE(stuff<<" (visit "<<counter<<")");} }
00128
00131 #define PRINT_VECTOR(v) \
00132 { std::cout << FormDebugHead() << #v " = {"; \
00133 for (unsigned _i=0; _i<v.size(); _i++) { \
00134 std::cout << (_i==0?"":",") << v[_i]; } \
00135 std::cout << "}" << std::endl << std::flush; }
00136
00147 #define MARK_IN_ORDER PetscTools::BeginRoundRobin(); MARK; PetscTools::EndRoundRobin();
00148
00152 #define STACK PrintTheStack();
00153
00154 #endif