This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[Patch] Get trace file name when using 'target tfile'
- From: "Abid, Hafiz" <hafiz_abid at mentor dot com>
- To: <gdb-patches at sourceware dot org>
- Cc: <palves at redhat dot com>, <marc dot khouzam at ericsson dot com>
- Date: Wed, 13 Feb 2013 14:38:18 +0000
- Subject: [Patch] Get trace file name when using 'target tfile'
Hi All,
When using 'target tfile', commands like 'info target' and 'info files'
don't show the name of the trace file. This patch adds this
information. It also add a new field in the output of the -trace-status
command so that frontends can get this inforamtion.
This patch was originally written by Pedro. I have updated and
regtested it.
Regards,
Abid
Before:
(gdb) info target
Local trace dump file:
Looking at a trace file.
(gdb) interpreter-exec mi -trace-status
^done,supported="file",running="0",stop-reason="request",frames="7215",frames-created="7215",buffer-size="5242880",buffer-free="2833070",disconnected="0",circular="0",user-name="",notes="",start-time="0.000000",stop-time="0.000000"
After:
(gdb) info target
Local trace dump file:
`/home/abidh/trace.txt'
(gdb) interpreter-exec mi -trace-status
^done,supported="file",trace-file="/home/abidh/trace.txt",running="0",stop-reason="request",frames="7215",frames-created="7215",buffer-size="5242880",buffer-free="2833070",disconnected="0",circular="0",user-name="",notes="",start-time="0.000000",stop-time="0.000000"
2013-02-13 Pedro Alves <pedro@codesourcery.com>
Hafiz Abid Qadeer <abidh@codesourcery.com>
gdb/
* tracepoint.c (trace_status_mi): Output "trace-file" field.
(tfile_open): Record the trace file's filename in the trace
status.
(tfile_files_info): Mention the name of the trace file.
* tracepoint.h (struct trace_status) <from_file>: Make it hold
the
trace file's filename instead of a boolean.
gdb/doc/
* gdb.texinfo (GDB/MI Tracepoint Commands) <-trace-status>:
Document the "trace-file" field.
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index e3f336e..e8ac8c5 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -32094,6 +32094,10 @@ The value of the disconnected tracing flag. @code{1} means that
tracing will continue after @value{GDBN} disconnects, @code{0} means
that the trace run will stop.
+@item trace-file
+The filename of the trace file being examined. This field is
+optional, and only present when examining a trace file.
+
@end table
@subsubheading @value{GDBN} Command
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index b45863e..848a1b1 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -2094,6 +2094,9 @@ trace_status_mi (int on_stop)
else if (!on_stop)
ui_out_field_string (uiout, "supported", "1");
+ if (ts->from_file)
+ ui_out_field_string (uiout, "trace-file", ts->from_file);
+
gdb_assert (ts->running_known);
if (ts->running)
@@ -3745,8 +3748,8 @@ tfile_open (char *filename, int from_tty)
trace_regblock_size = 0;
ts = current_trace_status ();
- /* We know we're working with a file. */
- ts->from_file = 1;
+ /* We know we're working with a file. Record its name. */
+ ts->from_file = trace_filename;
/* Set defaults in case there is no status line. */
ts->running_known = 0;
ts->stop_reason = trace_stop_reason_unknown;
@@ -4196,8 +4199,7 @@ tfile_close (int quitting)
static void
tfile_files_info (struct target_ops *t)
{
- /* (it would be useful to mention the name of the file). */
- printf_filtered ("Looking at a trace file.\n");
+ printf_filtered ("\t`%s'\n", trace_filename);
}
/* The trace status for a file is that tracing can never be run. */
diff --git a/gdb/tracepoint.h b/gdb/tracepoint.h
index 2e1d83a..f407046 100644
--- a/gdb/tracepoint.h
+++ b/gdb/tracepoint.h
@@ -72,9 +72,9 @@ enum trace_stop_reason
struct trace_status
{
- /* This is true if the status is coming from a file rather
- than a live target. */
- int from_file;
+ /* If the status is coming from a file rather than a live target,
+ this points at the file's filename. Otherwise, this is NULL. */
+ const char *from_file;
/* This is true if the value of the running field is known. */
int running_known;