diff options
author | Tom Tromey <tom@tromey.com> | 2021-12-31 12:00:11 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2022-03-28 14:13:28 -0600 |
commit | 52a4a5885af15e7ef32d5f4e5b77f98349c32276 (patch) | |
tree | 1ca6af096a9c652bbe8aa4f7347eb178e39ed1f1 /gdb/cli/cli-interp.c | |
parent | Add new timestamped_file class (diff) | |
download | binutils-gdb-52a4a5885af15e7ef32d5f4e5b77f98349c32276.tar.gz binutils-gdb-52a4a5885af15e7ef32d5f4e5b77f98349c32276.tar.bz2 binutils-gdb-52a4a5885af15e7ef32d5f4e5b77f98349c32276.zip |
Switch gdb_stdlog to use timestamped_file
Currently, timestamps for logging are done by looking for the use of
gdb_stdlog in vfprintf_unfiltered. This seems potentially buggy, in
that during logging or other redirects (like execute_fn_to_ui_file) we
might have gdb_stdout==gdb_stdlog and so, conceivably, wind up with
timestamps in a log when they were not desired.
It seems better, instead, for timestamps to be a property of the
ui_file itself.
This patch changes gdb to use the new timestamped_file for gdb_stdlog
where appropriate, and removes the special case from
vfprintf_unfiltered.
Note that this may somewhat change the output in some cases -- in
particular, when going through execute_fn_to_ui_file (or the _string
variant), timestamps won't be emitted. This could be fixed in those
functions, but it wasn't clear to me whether this is really desirable.
Note also that this changes the TUI to send gdb_stdlog to gdb_stderr.
I imagine that the previous use of gdb_stdout here was inadvertent.
(And in any case it probably doesn't matter.)
Diffstat (limited to 'gdb/cli/cli-interp.c')
-rw-r--r-- | gdb/cli/cli-interp.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c index d36715d1d8f..fe9e4b43f14 100644 --- a/gdb/cli/cli-interp.c +++ b/gdb/cli/cli-interp.c @@ -397,6 +397,7 @@ struct saved_output_files ui_file *targ; ui_file *targerr; ui_file_up file_to_delete; + ui_file_up log_to_delete; }; static std::unique_ptr<saved_output_files> saved_output; @@ -427,8 +428,11 @@ cli_interp_base::set_logging (ui_file_up logfile, bool logging_redirect, else saved_output->file_to_delete = std::move (logfile); + saved_output->log_to_delete.reset + (new timestamped_file (debug_redirect ? logfile_p : tee)); + gdb_stdout = logging_redirect ? logfile_p : tee; - gdb_stdlog = debug_redirect ? logfile_p : tee; + gdb_stdlog = saved_output->log_to_delete.get (); gdb_stderr = logging_redirect ? logfile_p : tee; gdb_stdtarg = logging_redirect ? logfile_p : tee; gdb_stdtargerr = logging_redirect ? logfile_p : tee; |