aboutsummaryrefslogtreecommitdiff
path: root/gdb/tracepoint.c
diff options
context:
space:
mode:
authorVladimir Prus <vladimir@codesourcery.com>2010-03-23 21:50:11 +0000
committerVladimir Prus <vladimir@codesourcery.com>2010-03-23 21:50:11 +0000
commit40e1c229a2dd402eb050b1025c4b1b7667a7e83e (patch)
treee8fa1df36bc7f26c586864858edfca5915448df9 /gdb/tracepoint.c
parent9b4c786c6c9f2599873343b935a46a446ba1c029 (diff)
downloadfsf-binutils-gdb-40e1c229a2dd402eb050b1025c4b1b7667a7e83e.zip
fsf-binutils-gdb-40e1c229a2dd402eb050b1025c4b1b7667a7e83e.tar.gz
fsf-binutils-gdb-40e1c229a2dd402eb050b1025c4b1b7667a7e83e.tar.bz2
-trace-define-variable and -trace-list-variables.
* tracepoint.c (create_trace_state_variable): Make private copy of name, as opposed to assuming the pointer lives forever. (tvariables_info_1): New. (tvariables_info): Use the above. * tracepoint.h (create_trace_state_variable, tvariables_info_1): Declare. * mi/mi-cmds.c (mi_cmds): Register -trace-define-variable and -trace-list-variables. * mi/mi-cmds.h (mi_cmd_trace_define_variable) (mi_cmd_trace_list_variables): New. * mi/mi-main.c (mi_cmd_trace_define_variable) (mi_cmd_trace_list_variables): New.
Diffstat (limited to 'gdb/tracepoint.c')
-rw-r--r--gdb/tracepoint.c65
1 files changed, 48 insertions, 17 deletions
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index 5fe456d..bf5cdba 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -276,7 +276,7 @@ create_trace_state_variable (const char *name)
struct trace_state_variable tsv;
memset (&tsv, 0, sizeof (tsv));
- tsv.name = name;
+ tsv.name = xstrdup (name);
tsv.number = next_tsv_number++;
return VEC_safe_push (tsv_s, tvariables, &tsv);
}
@@ -305,6 +305,7 @@ delete_trace_state_variable (const char *name)
for (ix = 0; VEC_iterate (tsv_s, tvariables, ix, tsv); ++ix)
if (strcmp (name, tsv->name) == 0)
{
+ xfree ((void *)tsv->name);
VEC_unordered_remove (tsv_s, tvariables, ix);
return;
}
@@ -406,17 +407,15 @@ delete_trace_variable_command (char *args, int from_tty)
dont_repeat ();
}
-/* List all the trace state variables. */
-
-static void
-tvariables_info (char *args, int from_tty)
+void
+tvariables_info_1 (void)
{
struct trace_state_variable *tsv;
int ix;
- char *reply;
- ULONGEST tval;
+ int count = 0;
+ struct cleanup *back_to;
- if (VEC_length (tsv_s, tvariables) == 0)
+ if (VEC_length (tsv_s, tvariables) == 0 && !ui_out_is_mi_like_p (uiout))
{
printf_filtered (_("No trace state variables.\n"));
return;
@@ -427,24 +426,56 @@ tvariables_info (char *args, int from_tty)
tsv->value_known = target_get_trace_state_variable_value (tsv->number,
&(tsv->value));
- printf_filtered (_("Name\t\t Initial\tCurrent\n"));
+ back_to = make_cleanup_ui_out_table_begin_end (uiout, 3,
+ count, "trace-variables");
+ ui_out_table_header (uiout, 15, ui_left, "name", "Name");
+ ui_out_table_header (uiout, 11, ui_left, "initial", "Initial");
+ ui_out_table_header (uiout, 11, ui_left, "current", "Current");
+
+ ui_out_table_body (uiout);
for (ix = 0; VEC_iterate (tsv_s, tvariables, ix, tsv); ++ix)
{
- printf_filtered ("$%s", tsv->name);
- print_spaces_filtered (17 - strlen (tsv->name), gdb_stdout);
- printf_filtered ("%s ", plongest (tsv->initial_value));
- print_spaces_filtered (11 - strlen (plongest (tsv->initial_value)), gdb_stdout);
+ struct cleanup *back_to2;
+ char *c;
+ char *name;
+
+ back_to2 = make_cleanup_ui_out_tuple_begin_end (uiout, "variable");
+
+ name = concat ("$", tsv->name, NULL);
+ make_cleanup (xfree, name);
+ ui_out_field_string (uiout, "name", name);
+ ui_out_field_string (uiout, "initial", plongest (tsv->initial_value));
+
if (tsv->value_known)
- printf_filtered (" %s", plongest (tsv->value));
+ c = plongest (tsv->value);
+ else if (ui_out_is_mi_like_p (uiout))
+ /* For MI, we prefer not to use magic string constants, but rather
+ omit the field completely. The difference between unknown and
+ undefined does not seem important enough to represent. */
+ c = NULL;
else if (current_trace_status ()->running || traceframe_number >= 0)
/* The value is/was defined, but we don't have it. */
- printf_filtered (_(" <unknown>"));
+ c = "<unknown>";
else
/* It is not meaningful to ask about the value. */
- printf_filtered (_(" <undefined>"));
- printf_filtered ("\n");
+ c = "<undefined>";
+ if (c)
+ ui_out_field_string (uiout, "current", c);
+ ui_out_text (uiout, "\n");
+
+ do_cleanups (back_to2);
}
+
+ do_cleanups (back_to);
+}
+
+/* List all the trace state variables. */
+
+static void
+tvariables_info (char *args, int from_tty)
+{
+ tvariables_info_1 ();
}
/* ACTIONS functions: */