diff options
-rw-r--r-- | 001help.cc | 3 | ||||
-rw-r--r-- | 003trace.cc | 36 | ||||
-rw-r--r-- | 101run_sandboxed.cc | 2 | ||||
-rw-r--r-- | subx/003trace.cc | 50 |
4 files changed, 69 insertions, 22 deletions
diff --git a/001help.cc b/001help.cc index 3cab06d9..78877561 100644 --- a/001help.cc +++ b/001help.cc @@ -39,6 +39,9 @@ if (argc <= 1 || is_equal(argv[1], "--help")) { << " To see where a mu program is spending its time:\n" << " mu --profile file_or_dir1 file_or_dir2 ...\n" << " this slices and dices time spent in various profile.* output files\n" + << " To print out the trace to stderr:\n" + << " mu --dump file1.mu file2.mu ...\n" + << " this is handy when you want to see sandboxed traces alongside the main one\n" << "\n" << " To browse a trace generated by a previous run:\n" << " mu browse-trace file\n" diff --git a/003trace.cc b/003trace.cc index dd60ce42..af707354 100644 --- a/003trace.cc +++ b/003trace.cc @@ -109,16 +109,10 @@ ofstream null_stream; // never opened, so writes to it silently fail //: Some constants. :(before "struct trace_stream") // include constants in all cleaved compilation units const int Max_depth = 9999; -// Most important traces are printed to the screen by default -const int Error_depth = 0; -:(before "End Globals") -int Hide_errors = false; // if set, don't print errors to screen :(before "End trace_stream Constructor") curr_stream = NULL; curr_depth = Max_depth; collect_depth = Max_depth; -:(before "End Reset") -Hide_errors = false; :(before "struct trace_stream") struct trace_line { @@ -170,7 +164,7 @@ void trace_stream::newline() { past_lines.push_back(trace_line(curr_contents, trim(curr_label), curr_depth)); // preserve indent in contents // maybe incrementally dump trace trace_line& t = past_lines.back(); - if (!Hide_errors && curr_depth == Error_depth) { + if (should_incrementally_print_trace()) { cerr << std::setw(4) << t.depth << ' ' << t.label << ": " << t.contents << '\n'; } // End trace Commit @@ -208,6 +202,22 @@ lease_tracer::~lease_tracer() { :(before "End Includes") #define raise (!Trace_stream ? (scroll_to_bottom_and_close_console(),++Trace_errors,cerr) /*do print*/ : Trace_stream->stream(Error_depth, "error")) +//: Print errors to the screen by default. +:(before "struct trace_stream") // include constants in all cleaved compilation units +const int Error_depth = 0; +:(before "End Globals") +int Hide_errors = false; // if set, don't print errors to screen +:(before "End Reset") +Hide_errors = false; +:(code) +bool trace_stream::should_incrementally_print_trace() { + if (!Hide_errors && curr_depth == Error_depth) return true; + // End Incremental Trace Print Conditions + return false; +} +:(before "End trace_stream Methods") +bool should_incrementally_print_trace(); + :(before "End Globals") int Trace_errors = 0; // used only when Trace_stream is NULL @@ -448,6 +458,18 @@ string readable_contents(string label) { return output.str(); } +//: Print traces to the screen as they happen. +//: Particularly useful when juggling multiple trace streams, like when +//: debugging sandboxes. +:(before "End Globals") +bool Dump_trace = false; +:(before "End Commandline Options(*arg)") +else if (is_equal(*arg, "--dump")) { + Dump_trace = true; +} +:(before "End Incremental Trace Print Conditions") +if (Dump_trace) return true; + //: Miscellaneous helpers. :(code) diff --git a/101run_sandboxed.cc b/101run_sandboxed.cc index f054cd8b..4a897d3a 100644 --- a/101run_sandboxed.cc +++ b/101run_sandboxed.cc @@ -163,7 +163,7 @@ void run_code_begin(bool should_stash_snapshots) { Save_callstack_depth = Callstack_depth; Callstack_depth = Initial_callstack_depth; Trace_stream = new trace_stream; - Trace_stream->collect_depth = App_depth; + Trace_stream->collect_depth = Save_trace_stream->collect_depth; } void run_code_end() { diff --git a/subx/003trace.cc b/subx/003trace.cc index 9aba3f12..bb614c66 100644 --- a/subx/003trace.cc +++ b/subx/003trace.cc @@ -109,22 +109,10 @@ ofstream null_stream; // never opened, so writes to it silently fail //: Some constants. :(before "struct trace_stream") // include constants in all cleaved compilation units const int Max_depth = 9999; -// Most important traces are printed to the screen by default -const int Error_depth = 0; -const int Warn_depth = 1; -:(before "End Globals") -int Hide_errors = false; // if set, don't print errors or warnings to screen -int Hide_warnings = false; // if set, don't print warnings to screen :(before "End trace_stream Constructor") curr_stream = NULL; curr_depth = Max_depth; collect_depth = Max_depth; -:(before "End Reset") -Hide_errors = false; -Hide_warnings = false; -//: Never dump warnings in scenarios -:(before "End Test Setup") -Hide_warnings = true; :(before "struct trace_stream") struct trace_line { @@ -177,8 +165,7 @@ void trace_stream::newline() { past_lines.push_back(trace_line(curr_contents, trim(curr_label), curr_depth)); // preserve indent in contents // maybe incrementally dump trace trace_line& t = past_lines.back(); - if ((!Hide_errors && curr_depth == Error_depth) - || (!Hide_warnings && !Hide_errors && curr_depth == Warn_depth)) { + if (should_incrementally_print_trace()) { cerr << std::setw(4) << t.depth << ' ' << t.label << ": " << t.contents << '\n'; } // End trace Commit @@ -217,6 +204,29 @@ lease_tracer::~lease_tracer() { #define raise (!Trace_stream ? (++Trace_errors,cerr) /*do print*/ : Trace_stream->stream(Error_depth, "error")) #define warn (!Trace_stream ? (++Trace_errors,cerr) /*do print*/ : Trace_stream->stream(Warn_depth, "warn")) +//: Print errors and warnings to the screen by default. +:(before "struct trace_stream") // include constants in all cleaved compilation units +const int Error_depth = 0; +const int Warn_depth = 1; +:(before "End Globals") +int Hide_errors = false; // if set, don't print errors or warnings to screen +int Hide_warnings = false; // if set, don't print warnings to screen +:(before "End Reset") +Hide_errors = false; +Hide_warnings = false; +//: Never dump warnings in scenarios +:(before "End Test Setup") +Hide_warnings = true; +:(code) +bool trace_stream::should_incrementally_print_trace() { + if (!Hide_errors && curr_depth == Error_depth) return true; + if (!Hide_warnings && !Hide_errors && curr_depth == Warn_depth) return true; + // End Incremental Trace Print Conditions + return false; +} +:(before "End trace_stream Methods") +bool should_incrementally_print_trace(); + :(before "End Globals") int Trace_errors = 0; // used only when Trace_stream is NULL @@ -442,6 +452,18 @@ string readable_contents(string label) { return output.str(); } +//: Print traces to the screen as they happen. +//: Particularly useful when juggling multiple trace streams, like when +//: debugging sandboxes. +:(before "End Globals") +bool Dump_trace = false; +:(before "End Commandline Options(*arg)") +else if (is_equal(*arg, "--dump")) { + Dump_trace = true; +} +:(before "End Incremental Trace Print Conditions") +if (Dump_trace) return true; + //: Miscellaneous helpers. :(code) |