diff options
author | Kartik Agaram <vc@akkartik.com> | 2018-07-26 17:00:14 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2018-07-26 17:00:37 -0700 |
commit | a7291869f5174076b8d4ee0f352d0d734bd66774 (patch) | |
tree | bef98c313b4d28b0e298ddef46dc8ed3e9992e0c /subx/003trace.cc | |
parent | 87fe3d7a9e5ae9503ee89a3d69f8b84a88ad24de (diff) | |
download | mu-a7291869f5174076b8d4ee0f352d0d734bd66774.tar.gz |
4427 - support for '--trace' argv
This ports commit 4421 to the subx/ program.
Diffstat (limited to 'subx/003trace.cc')
-rw-r--r-- | subx/003trace.cc | 45 |
1 files changed, 34 insertions, 11 deletions
diff --git a/subx/003trace.cc b/subx/003trace.cc index 994b5eca..f5969de6 100644 --- a/subx/003trace.cc +++ b/subx/003trace.cc @@ -77,14 +77,36 @@ struct trace_line { }; :(before "End Globals") -bool Hide_errors = false; -bool Dump_trace = false; -string Dump_label = ""; +bool Hide_errors = false; // if set, don't print even error trace lines to screen +bool Dump_trace = false; // if set, print trace lines to screen +string Dump_label = ""; // if set, print trace lines matching a single label to screen :(before "End Reset") Hide_errors = false; Dump_trace = false; Dump_label = ""; +//: Support for tracing an entire run. +//: Traces can have a lot of overhead, so only turn them on when asked. +:(before "End Commandline Options(*arg)") +else if (is_equal(*arg, "--trace")) { + Save_trace = true; +} +:(before "End Commandline Parsing") +if (Save_trace) { + cerr << "initializing trace\n"; + Trace_stream = new trace_stream; +} +:(code) +void cleanup_main() { + if (!Trace_stream) return; + if (Save_trace) + Trace_stream->save(); + delete Trace_stream; + Trace_stream = NULL; +} +:(before "End One-time Setup") +atexit(cleanup_main); + :(before "End Types") // Pre-define some global constants that trace_stream needs to know about. // Since they're in the Types section, they'll be included in any cleaved @@ -116,6 +138,13 @@ struct trace_stream { return *curr_stream; } + void save() { + cerr << "saving trace to 'last_run'\n"; + ofstream fout("last_run"); + fout << readable_contents(""); + fout.close(); + } + // be sure to call this before messing with curr_stream or curr_label void newline(); // useful for debugging @@ -189,7 +218,7 @@ ostream& operator<<(ostream& os, end /*unused*/) { } :(before "End Globals") -bool Save_trace = false; +bool Save_trace = false; // if set, write out trace to disk // Trace_stream is a resource, lease_tracer uses RAII to manage it. :(before "End Types") @@ -200,12 +229,7 @@ struct lease_tracer { :(code) lease_tracer::lease_tracer() { Trace_stream = new trace_stream; } lease_tracer::~lease_tracer() { - if (!Trace_stream) return; // in case tests close Trace_stream - if (Save_trace) { - ofstream fout("last_trace"); - fout << Trace_stream->readable_contents(""); - fout.close(); - } + if (Save_trace) Trace_stream->save(); delete Trace_stream, Trace_stream = NULL; } :(before "End Includes") @@ -371,7 +395,6 @@ using std::vector; using std::list; #include <set> using std::set; -#include <algorithm> #include <sstream> using std::istringstream; |