Add new timestamped_file class
This adds a "timestamped_file" subclass of ui_file. This class adds a timestamp to its output when appropriate. That is, it follows the rule already used in vfprintf_unfiltered of adding a timestamp at most once per write. The new class is not yet used.
This commit is contained in:
parent
8b1931b394
commit
3c6c449e30
4 changed files with 57 additions and 1 deletions
|
@ -25,6 +25,7 @@
|
||||||
#include "gdbsupport/gdb_select.h"
|
#include "gdbsupport/gdb_select.h"
|
||||||
#include "gdbsupport/filestuff.h"
|
#include "gdbsupport/filestuff.h"
|
||||||
#include "cli/cli-style.h"
|
#include "cli/cli-style.h"
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
null_file null_stream;
|
null_file null_stream;
|
||||||
|
|
||||||
|
@ -449,3 +450,31 @@ no_terminal_escape_file::puts (const char *buf)
|
||||||
if (*buf != '\0')
|
if (*buf != '\0')
|
||||||
this->stdio_file::write (buf, strlen (buf));
|
this->stdio_file::write (buf, strlen (buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
timestamped_file::write (const char *buf, long len)
|
||||||
|
{
|
||||||
|
if (debug_timestamp)
|
||||||
|
{
|
||||||
|
/* Print timestamp if previous print ended with a \n. */
|
||||||
|
if (m_needs_timestamp)
|
||||||
|
{
|
||||||
|
using namespace std::chrono;
|
||||||
|
|
||||||
|
steady_clock::time_point now = steady_clock::now ();
|
||||||
|
seconds s = duration_cast<seconds> (now.time_since_epoch ());
|
||||||
|
microseconds us = duration_cast<microseconds> (now.time_since_epoch () - s);
|
||||||
|
std::string timestamp = string_printf ("%ld.%06ld ",
|
||||||
|
(long) s.count (),
|
||||||
|
(long) us.count ());
|
||||||
|
m_stream->puts (timestamp.c_str ());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Print the message. */
|
||||||
|
m_stream->write (buf, len);
|
||||||
|
|
||||||
|
m_needs_timestamp = (len > 0 && buf[len - 1] == '\n');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_stream->write (buf, len);
|
||||||
|
}
|
||||||
|
|
|
@ -364,4 +364,28 @@ public:
|
||||||
void puts (const char *linebuffer) override;
|
void puts (const char *linebuffer) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* A ui_file that optionally puts a timestamp at the start of each
|
||||||
|
line of output. */
|
||||||
|
|
||||||
|
class timestamped_file : public ui_file
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit timestamped_file (ui_file *stream)
|
||||||
|
: m_stream (stream)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
DISABLE_COPY_AND_ASSIGN (timestamped_file);
|
||||||
|
|
||||||
|
void write (const char *buf, long len) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
/* Output is sent here. */
|
||||||
|
ui_file *m_stream;
|
||||||
|
|
||||||
|
/* True if the next output should be timestamped. */
|
||||||
|
bool m_needs_timestamp = true;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -103,7 +103,7 @@ static std::chrono::steady_clock::duration prompt_for_continue_wait_time;
|
||||||
|
|
||||||
/* A flag indicating whether to timestamp debugging messages. */
|
/* A flag indicating whether to timestamp debugging messages. */
|
||||||
|
|
||||||
static bool debug_timestamp = false;
|
bool debug_timestamp = false;
|
||||||
|
|
||||||
/* True means that strings with character values >0x7F should be printed
|
/* True means that strings with character values >0x7F should be printed
|
||||||
as octal escapes. False means just print the value (e.g. it's an
|
as octal escapes. False means just print the value (e.g. it's an
|
||||||
|
|
|
@ -185,6 +185,9 @@ extern int get_chars_per_line ();
|
||||||
|
|
||||||
extern bool pagination_enabled;
|
extern bool pagination_enabled;
|
||||||
|
|
||||||
|
/* A flag indicating whether to timestamp debugging messages. */
|
||||||
|
extern bool debug_timestamp;
|
||||||
|
|
||||||
extern struct ui_file **current_ui_gdb_stdout_ptr (void);
|
extern struct ui_file **current_ui_gdb_stdout_ptr (void);
|
||||||
extern struct ui_file **current_ui_gdb_stdin_ptr (void);
|
extern struct ui_file **current_ui_gdb_stdin_ptr (void);
|
||||||
extern struct ui_file **current_ui_gdb_stderr_ptr (void);
|
extern struct ui_file **current_ui_gdb_stderr_ptr (void);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue