diff options
Diffstat (limited to 'gdb/mi/mi-interp.c')
-rw-r--r-- | gdb/mi/mi-interp.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c index 6a19bf0..ad1a06c 100644 --- a/gdb/mi/mi-interp.c +++ b/gdb/mi/mi-interp.c @@ -1279,7 +1279,8 @@ mi_interp::interp_ui_out () the consoles to use the supplied ui-file(s). */ void -mi_interp::set_logging (ui_file_up logfile, bool logging_redirect) +mi_interp::set_logging (ui_file_up logfile, bool logging_redirect, + bool debug_redirect) { struct mi_interp *mi = this; @@ -1289,22 +1290,30 @@ mi_interp::set_logging (ui_file_up logfile, bool logging_redirect) /* If something is being redirected, then grab logfile. */ ui_file *logfile_p = nullptr; - if (logging_redirect) - logfile_p = logfile.release (); + if (logging_redirect || debug_redirect) + { + logfile_p = logfile.get (); + mi->saved_raw_file_to_delete = logfile_p; + } /* If something is not being redirected, then a tee containing both the logfile and stdout. */ ui_file *tee = nullptr; - if (!logging_redirect) - tee = new tee_file (mi->raw_stdout, std::move (logfile)); + if (!logging_redirect || !debug_redirect) + { + tee = new tee_file (mi->raw_stdout, std::move (logfile)); + mi->saved_raw_file_to_delete = tee; + } mi->raw_stdout = logging_redirect ? logfile_p : tee; + mi->raw_stdlog = debug_redirect ? logfile_p : tee; } else { - delete mi->raw_stdout; + delete mi->saved_raw_file_to_delete; mi->raw_stdout = mi->saved_raw_stdout; mi->saved_raw_stdout = nullptr; + mi->saved_raw_file_to_delete = nullptr; } mi->out->set_raw (mi->raw_stdout); |