From: Guinevere Larsen <blarsen@redhat.com>
To: Abdul Basit Ijaz <abdul.b.ijaz@intel.com>, gdb-patches@sourceware.org
Cc: pedro@palves.net, philippe.waroquiers@skynet.be,
aburgess@redhat.com, tankut.baris.aktemur@intel.com,
christina.schimpe@intel.com, lsix@lancelotsix.com, eliz@gnu.org
Subject: Re: [PATCH v6 2/2] gdb: add shadowed field in '-stack-list-locals/variables' mi commands
Date: Tue, 16 Jan 2024 16:41:30 +0100 [thread overview]
Message-ID: <23a114c2-6103-401b-b10b-b2f09981a812@redhat.com> (raw)
In-Reply-To: <20231122081301.5997-3-abdul.b.ijaz@intel.com>
On 22/11/2023 09:13, Abdul Basit Ijaz wrote:
> From: "Ijaz, Abdul B" <abdul.b.ijaz@intel.com>
>
> For C/C++/Fortran languages GDB prints same name variable multiple times in
> case of variable shadowing and it is confusing for user to identify which
> variable belongs to the current scope. So GDB now prints location information
> for shadowed variables and add 'shadowed' field also in '-stack-list-locals'
> and '-stack-list-variables' mi commands for super-block shadowed variable.
>
> Suppose we have test.c file
>
> 1:int x = 42;
> 2: {
> 3: int x = 99;
> 4: int y = 52;
> 4: x = 99; /* break here */
> 5: }
>
> The "-stack-list-locals" and "-stack-list-variables" mi commands at the
> "break here" line gives the following output:
>
> Before the change:
>
> ~~~
> (gdb)
> -stack-list-locals 0
> ^done,locals=[name="x",name="y",name="x"]
> (gdb)
> -stack-list-locals 1
> ^done,locals=[{name="x",value="99"},{name="y",value="52"},{name="x",value="42"}]
> (gdb)
> -stack-list-locals 2
> ^done,locals=[{name="x",type="int",value="99"},{name="y",type="int",value="52"},{name="x",type="int",value="42"}]
> (gdb)
> -stack-list-variables 0
> ^done,variables=[{name="x"},{name="y"},{name="x"}]
> (gdb)
> -stack-list-variables 1
> ^done,variables=[{name="x",value="99"},{name="y",value="52"},{name="x",value="42"}]
> (gdb)
> -stack-list-variables 2
> ^done,variables=[{name="x",type="int",value="99"},{name="y",type="int",value="52"},{name="x",type="int",value="42"}]
> ~~~
>
> With this patch we obtain:
>
> ~~~
> (gdb)
> -stack-list-locals 0
> ^done,locals=[name="x",name="y",name="x"]
> (gdb)
> -stack-list-locals 1
> ^done,locals=[{name="x",value="99",file="test.c",line="4"},{name="y",value="52"},{name="x",value="42",file="test.c",line="2",shadowed="true"}]
> (gdb)
> -stack-list-locals 2
> ^done,locals=[{name="x",type="int",value="99",file="test.c",line="4"},{name="y",type="int",value="52"},{name="x",type="int",value="42",file="test.c",line="2",shadowed="true"}]
> (gdb)
> -stack-list-variables 0
> ^done,variables=[{name="x",file="test.c",line="4"},{name="y"},{name="x",file="test.c",line="2",shadowed="true"}]
> (gdb)
> -stack-list-variables 1
> ^done,variables=[{name="x",value="99",file="test.c",line="4"},{name="y",value="52"},{name="x",value="42",file="test.c",line="2",shadowed="true"}]
> (gdb)
> -stack-list-variables 2
> ^done,variables=[{name="x",type="int",value="99",file="test.c",line="4"},{name="y",type="int",value="52"},{name="x",type="int",value="42",file="test.c",line="2",shadowed="true"}]
> ~~~
I don't really know mi, but I tested this and it works without
introducing regressions.
Tested-By: Guinevere Larsen <blarsen@redhat.com>
--
Cheers,
Guinevere Larsen
She/Her/Hers
> ---
> gdb/doc/gdb.texinfo | 14 +++
> gdb/mi/mi-cmd-stack.c | 66 +++++++++-
> gdb/testsuite/gdb.mi/mi-var-shadowing.c | 48 ++++++++
> gdb/testsuite/gdb.mi/mi-var-shadowing.exp | 141 ++++++++++++++++++++++
> 4 files changed, 265 insertions(+), 4 deletions(-)
> create mode 100644 gdb/testsuite/gdb.mi/mi-var-shadowing.c
> create mode 100644 gdb/testsuite/gdb.mi/mi-var-shadowing.exp
>
> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
> index 6efcc5a8dc9..348844bbb8d 100644
> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -34772,6 +34772,20 @@ If the @code{--skip-unavailable} option is specified, local variables
> and arguments that are not available are not listed. Partially
> available arguments and local variables are still displayed, however.
>
> +@smallexample
> +1: int x = 3;
> +2: @{
> +3: int x = 4; // breakpt
> +4: @}
> +(gdb) -stack-list-variables 2
> +^done,variables=[@{name="x",type="int",value="4",file="name.c",line="3"@},@{name="x",type="int",value="3",file="name.c",line="1",shadowed="true"@}]
> +@end smallexample
> +
> +A variable is shadowed when there's another variable by the same
> +name which is declared within an inner scope (decision block,
> +method, or inner class). For such cases, its location for the
> +outermost scope is followed by @samp{shadowed} attribute.
> +
> @subsubheading Example
>
> @smallexample
> diff --git a/gdb/mi/mi-cmd-stack.c b/gdb/mi/mi-cmd-stack.c
> index e473be7d465..21638796b63 100644
> --- a/gdb/mi/mi-cmd-stack.c
> +++ b/gdb/mi/mi-cmd-stack.c
> @@ -38,6 +38,8 @@
> #include "gdbsupport/gdb-safe-ctype.h"
> #include "inferior.h"
> #include "observable.h"
> +#include "include/libiberty.h"
> +#include <unordered_set>
>
> enum what_to_list { locals, arguments, all };
>
> @@ -491,7 +493,9 @@ mi_cmd_stack_list_variables (const char *command, const char *const *argv,
>
> static void
> list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
> - enum print_values values, int skip_unavailable)
> + enum print_values values, int skip_unavailable,
> + const std::unordered_set<std::string> *shadowed_vars,
> + std::unordered_set<std::string> &printed_vars)
> {
> struct ui_out *uiout = current_uiout;
>
> @@ -520,6 +524,18 @@ list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
> tuple_emitter.emplace (uiout, nullptr);
>
> string_file stb;
> + const char *name = arg->sym->print_name ();
> + bool already_printed = !printed_vars.insert (name).second;
> + printed_vars.insert (name);
> + bool shadowed = shadowed_vars->find (name) != shadowed_vars->end ();
> +
> + /* In case of Rust language it is possible to declare variable with
> + same name multiple times and only latest declaration of variable
> + is accessible. So print only the first instance and there is no
> + need of printing duplicates. */
> + if (current_language->la_language == language_rust
> + && shadowed && already_printed)
> + return;
>
> stb.puts (arg->sym->print_name ());
> if (arg->entry_kind == print_entry_values_only)
> @@ -559,6 +575,23 @@ list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
> }
> uiout->field_stream ("value", stb);
> }
> +
> + /* Only for C/C++/Fortran/Ada languages, in case of variables shadowing
> + print shadowed field after the superblock variable and only location
> + of the variables in the innerblock. */
> + if ((current_language->la_language == language_c
> + || current_language->la_language == language_cplus
> + || current_language->la_language == language_fortran
> + || current_language->la_language == language_ada)
> + && !(values == PRINT_NO_VALUES && what == locals)
> + && shadowed)
> + {
> + const char *file_name = lbasename (arg->sym->owner.symtab->filename);
> + uiout->field_string ("file", file_name);
> + uiout->field_unsigned ("line", arg->sym->m_line);
> + if (already_printed)
> + uiout->field_string ("shadowed", "true");
> + }
> }
>
> /* Print a list of the objects for the frame FI in a certain form,
> @@ -572,9 +605,10 @@ list_args_or_locals (const frame_print_options &fp_opts,
> enum what_to_list what, enum print_values values,
> frame_info_ptr fi, int skip_unavailable)
> {
> - const struct block *block;
> + const struct block *block, *orig_block;
> const char *name_of_result;
> struct ui_out *uiout = current_uiout;
> + std::unordered_set<std::string> collected_vars, shadowed_vars, printed_vars;
>
> block = get_frame_block (fi, 0);
>
> @@ -595,6 +629,26 @@ list_args_or_locals (const frame_print_options &fp_opts,
>
> ui_out_emit_list list_emitter (uiout, name_of_result);
>
> + orig_block = block;
> + /* Stored list of shadowed variables later help in identifying them
> + from the rest. */
> + while (block != nullptr)
> + {
> + for (struct symbol *sym : block_iterator_range (block))
> + {
> + if (!sym->is_argument ())
> + {
> + const char *name = sym->print_name ();
> + if (!collected_vars.insert (name).second)
> + shadowed_vars.insert (name);
> + }
> + }
> + if (block->function ())
> + break;
> + block = block->superblock ();
> + }
> +
> + block = orig_block;
> while (block != 0)
> {
> for (struct symbol *sym : block_iterator_range (block))
> @@ -663,9 +717,13 @@ list_args_or_locals (const frame_print_options &fp_opts,
> }
>
> if (arg.entry_kind != print_entry_values_only)
> - list_arg_or_local (&arg, what, values, skip_unavailable);
> + list_arg_or_local (&arg, what, values,
> + skip_unavailable, &shadowed_vars,
> + printed_vars);
> if (entryarg.entry_kind != print_entry_values_no)
> - list_arg_or_local (&entryarg, what, values, skip_unavailable);
> + list_arg_or_local (&entryarg, what, values,
> + skip_unavailable, &shadowed_vars,
> + printed_vars);
> }
> }
>
> diff --git a/gdb/testsuite/gdb.mi/mi-var-shadowing.c b/gdb/testsuite/gdb.mi/mi-var-shadowing.c
> new file mode 100644
> index 00000000000..f58a055c5e5
> --- /dev/null
> +++ b/gdb/testsuite/gdb.mi/mi-var-shadowing.c
> @@ -0,0 +1,48 @@
> +/* Copyright (C) 2023 Free Software Foundation, Inc.
> +
> + This program is free software; you can redistribute it and/or modify
> + it under the terms of the GNU General Public License as published by
> + the Free Software Foundation; either version 3 of the License, or
> + (at your option) any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + GNU General Public License for more details.
> +
> + You should have received a copy of the GNU General Public License
> + along with this program. If not, see <http://www.gnu.org/licenses/>. */
> +
> +#include <stdlib.h>
> +
> +void
> +shadowing (void)
> +{
> + int a; /* entry bp */
> + unsigned int val1 = 1; /* val1-d1 */
> + unsigned int val2 = 2; /* val2-d1 */
> + a = 101; /* bp for locals 1 */
> + {
> + unsigned int val2 = 3; /* val2-d2 */
> + unsigned int val3 = 4; /* val3-d1 */
> + a = 102; /* bp for locals 2 */
> + {
> + unsigned int val1 = 5; /* val1-d2 */
> + a = 103; /* bp for locals 3 */
> + {
> + unsigned int val1 = 6; /* val1-d3 */
> + unsigned int val2 = 7; /* val2-d3 */
> + unsigned int val3 = 8; /* val3-d2 */
> + a = 104; /* bp for locals 4 */
> + }
> + }
> + }
> + a = 105; /* bp for locals 5 */
> +}
> +
> +int
> +main (void)
> +{
> + shadowing ();
> + return 0;
> +}
> diff --git a/gdb/testsuite/gdb.mi/mi-var-shadowing.exp b/gdb/testsuite/gdb.mi/mi-var-shadowing.exp
> new file mode 100644
> index 00000000000..d0a4c3cd79a
> --- /dev/null
> +++ b/gdb/testsuite/gdb.mi/mi-var-shadowing.exp
> @@ -0,0 +1,141 @@
> +# Copyright 2023 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see <http://www.gnu.org/licenses/>.
> +
> +load_lib mi-support.exp
> +set MIFLAGS "-i=mi"
> +
> +gdb_exit
> +if [mi_gdb_start] {
> + continue
> +}
> +
> +standard_testfile
> +
> +set opts {debug}
> +if [build_executable ${testfile}.exp ${testfile} ${srcfile} $opts] {
> + return -1
> +}
> +
> +mi_delete_breakpoints
> +mi_gdb_reinitialize_dir $srcdir/$subdir
> +mi_gdb_load ${binfile}
> +mi_runto main
> +
> +set bp_line1 [gdb_get_line_number "bp for locals 1" ${srcfile}]
> +set bp_line2 [gdb_get_line_number "bp for locals 2" ${srcfile}]
> +set bp_line3 [gdb_get_line_number "bp for locals 3" ${srcfile}]
> +set bp_line4 [gdb_get_line_number "bp for locals 4" ${srcfile}]
> +set bp_line5 [gdb_get_line_number "bp for locals 5" ${srcfile}]
> +
> +set val1_d1 [gdb_get_line_number "val1-d1" ${srcfile}]
> +set val1_d2 [gdb_get_line_number "val1-d2" ${srcfile}]
> +set val1_d3 [gdb_get_line_number "val1-d3" ${srcfile}]
> +set val2_d1 [gdb_get_line_number "val2-d1" ${srcfile}]
> +set val2_d2 [gdb_get_line_number "val2-d2" ${srcfile}]
> +set val2_d3 [gdb_get_line_number "val2-d3" ${srcfile}]
> +set val3_d1 [gdb_get_line_number "val3-d1" ${srcfile}]
> +set val3_d2 [gdb_get_line_number "val3-d2" ${srcfile}]
> +set a_line [gdb_get_line_number "entry bp" ${srcfile}]
> +
> +set stack_test1_regx "\\^done,(locals|variables)=\\\[\{name=\"a\",type=\"int\",value=\"$decimal\"\},\{name=\"val1\",type=\"unsigned int\",value=\"1\"\},{name=\"val2\",type=\"unsigned int\",value=\"2\"\}\\\]"
> +set stack_test2_regx "\\^done,(locals|variables)=\\\[\{name=\"val2\",type=\"unsigned int\",value=\"3\",file=\"$srcfile\",line=\"$val2_d2\"\},\{name=\"val3\",type=\"unsigned int\",value=\"4\"\},\{name=\"a\",type=\"int\",value=\"101\"\},\{name=\"val1\",type=\"unsigned int\",value=\"1\"\},\{name=\"val2\",type=\"unsigned int\",value=\"2\",file=\"$srcfile\",line=\"$val2_d1\",shadowed=\"true\"\}\\\]"
> +set stack_test3_regx "\\^done,(locals|variables)=\\\[\{name=\"val1\",type=\"unsigned int\",value=\"5\",file=\"$srcfile\",line=\"$val1_d2\"\},\{name=\"val2\",type=\"unsigned int\",value=\"3\",file=\"$srcfile\",line=\"$val2_d2\"\},\{name=\"val3\",type=\"unsigned int\",value=\"4\"\},\{name=\"a\",type=\"int\",value=\"102\"\},\{name=\"val1\",type=\"unsigned int\",value=\"1\",file=\"$srcfile\",line=\"$val1_d1\",shadowed=\"true\"\},\{name=\"val2\",type=\"unsigned int\",value=\"2\",file=\"$srcfile\",line=\"$val2_d1\",shadowed=\"true\"\}\\\]"
> +set stack_test4_regx "\\^done,(locals|variables)=\\\[\{name=\"val1\",type=\"unsigned int\",value=\"6\",file=\"$srcfile\",line=\"$val1_d3\"\},\{name=\"val2\",type=\"unsigned int\",value=\"7\",file=\"$srcfile\",line=\"$val2_d3\"\},\{name=\"val3\",type=\"unsigned int\",value=\"8\",file=\"$srcfile\",line=\"$val3_d2\"\},\{name=\"val1\",type=\"unsigned int\",value=\"5\",file=\"$srcfile\",line=\"$val1_d2\",shadowed=\"true\"\},\{name=\"val2\",type=\"unsigned int\",value=\"3\",file=\"$srcfile\",line=\"$val2_d2\",shadowed=\"true\"\},\{name=\"val3\",type=\"unsigned int\",value=\"4\",file=\"$srcfile\",line=\"$val3_d1\",shadowed=\"true\"\},\{name=\"a\",type=\"int\",value=\"103\"\},\{name=\"val1\",type=\"unsigned int\",value=\"1\",file=\"$srcfile\",line=\"$val1_d1\",shadowed=\"true\"\},\{name=\"val2\",type=\"unsigned int\",value=\"2\",file=\"$srcfile\",line=\"$val2_d1\",shadowed=\"true\"\}\\\]"
> +set stack_test5_regx "\\^done,(locals|variables)=\\\[\{name=\"a\",type=\"int\",value=\"104\"\},\{name=\"val1\",type=\"unsigned int\",value=\"1\"\},\{name=\"val2\",type=\"unsigned int\",value=\"2\"\}\\\]"
> +
> +mi_gdb_test \
> + "-break-insert --source ${srcfile} --line ${bp_line1}" \
> + "\\^done.*source ${srcfile} \\-line ${bp_line1}.*" \
> + "bp at outermost level"
> +mi_execute_to "exec-continue" "breakpoint-hit" ".*" ".*" ".*" "${bp_line1}" \
> + { "" "disp=\"keep\"" } "continue to outermost level"
> +mi_gdb_test "-stack-list-locals 0" \
> + "\\^done,locals=\\\[name=\"a\",name=\"val1\",name=\"val2\"\\\]" \
> + "-stack-list-locals 0 at outermost level"
> +mi_gdb_test "-stack-list-variables 0" \
> + "\\^done,variables=\\\[{name=\"a\"},{name=\"val1\"},{name=\"val2\"}\\\]" \
> + "-stack-list-variables 0 at outermost level"
> +mi_gdb_test "-stack-list-locals 2" "${stack_test1_regx}" \
> + "-stack-list-locals 2 at outermost level"
> +mi_gdb_test "-stack-list-variables 2" "${stack_test1_regx}" \
> + "-stack-list-variables 2 at outermost level"
> +
> +mi_gdb_test \
> + "-break-insert --source ${srcfile} --line ${bp_line2}" \
> + "\\^done.*source ${srcfile} \\-line ${bp_line2}.*" \
> + "bp at first level"
> +mi_execute_to "exec-continue" "breakpoint-hit" ".*" ".*" ".*" "${bp_line2}" \
> + { "" "disp=\"keep\"" } "continue to first level"
> +mi_gdb_test "-stack-list-locals 0" \
> + "\\^done,locals=\\\[name=\"val2\",name=\"val3\",name=\"a\",name=\"val1\",name=\"val2\"\\\]" \
> + "-stack-list-locals 0 at first level"
> +mi_gdb_test "-stack-list-variables 0" \
> + "\\^done,variables=\\\[{name=\"val2\",file=\"$srcfile\",line=\"$val2_d2\"},{name=\"val3\"},{name=\"a\"},{name=\"val1\"},{name=\"val2\",file=\"$srcfile\",line=\"$val2_d1\",shadowed=\"true\"\}\\\]" \
> + "-stack-list-variables 0 at first level"
> +mi_gdb_test "-stack-list-locals 2" "${stack_test2_regx}" \
> + "-stack-list-locals 2 at first level"
> +mi_gdb_test "-stack-list-variables 2" "${stack_test2_regx}" \
> + "-stack-list-variables 2 at first level"
> +
> +mi_gdb_test \
> + "-break-insert --source ${srcfile} --line ${bp_line3}" \
> + "\\^done.*source ${srcfile} \\-line ${bp_line3}.*" \
> + "bp at second level"
> +mi_execute_to "exec-continue" "breakpoint-hit" ".*" ".*" ".*" "${bp_line3}" \
> + { "" "disp=\"keep\"" } "continue to second level"
> +mi_gdb_test "-stack-list-locals 0" \
> + "\\^done,locals=\\\[name=\"val1\",name=\"val2\",name=\"val3\",name=\"a\",name=\"val1\",name=\"val2\"\\\]" \
> + "-stack-list-locals 0 at second level"
> +mi_gdb_test "-stack-list-variables 0" \
> + "\\^done,variables=\\\[{name=\"val1\",file=\"$srcfile\",line=\"$val1_d2\"},{name=\"val2\",file=\"$srcfile\",line=\"$val2_d2\"},{name=\"val3\"},{name=\"a\"},{name=\"val1\",file=\"$srcfile\",line=\"$val1_d1\",shadowed=\"true\"\},{name=\"val2\",file=\"$srcfile\",line=\"$val2_d1\",shadowed=\"true\"\}\\\]" \
> + "-stack-list-variables 0 at second level"
> +mi_gdb_test "-stack-list-locals 2" "${stack_test3_regx}" \
> + "-stack-list-locals 2 at second level"
> +mi_gdb_test "-stack-list-variables 2" "${stack_test3_regx}" \
> + "-stack-list-variables 2 at second level"
> +
> +mi_gdb_test \
> + "-break-insert --source ${srcfile} --line ${bp_line4}" \
> + "\\^done.*source ${srcfile} \\-line ${bp_line4}.*" \
> + "bp at third level"
> +mi_execute_to "exec-continue" "breakpoint-hit" ".*" ".*" ".*" "${bp_line4}" \
> + { "" "disp=\"keep\"" } "continue to third level"
> +mi_gdb_test "-stack-list-locals 0" \
> + "\\^done,locals=\\\[name=\"val1\",name=\"val2\",name=\"val3\",name=\"val1\",name=\"val2\",name=\"val3\",name=\"a\",name=\"val1\",name=\"val2\"\\\]" \
> + "-stack-list-locals 0 at third level"
> +mi_gdb_test "-stack-list-variables 0" \
> + "\\^done,variables=\\\[{name=\"val1\",file=\"$srcfile\",line=\"$val1_d3\"},{name=\"val2\",file=\"$srcfile\",line=\"$val2_d3\"},{name=\"val3\",file=\"$srcfile\",line=\"$val3_d2\"},{name=\"val1\",file=\"$srcfile\",line=\"$val1_d2\",shadowed=\"true\"\},\{name=\"val2\",file=\"$srcfile\",line=\"$val2_d2\",shadowed=\"true\"\},\{name=\"val3\",file=\"$srcfile\",line=\"$val3_d1\",shadowed=\"true\"\},{name=\"a\"},{name=\"val1\",file=\"$srcfile\",line=\"$val1_d1\",shadowed=\"true\"\},{name=\"val2\",file=\"$srcfile\",line=\"$val2_d1\",shadowed=\"true\"\}\\\]" \
> + "-stack-list-variables 0 at third level"
> +mi_gdb_test "-stack-list-locals 2" "${stack_test4_regx}" \
> + "-stack-list-locals 2 at third level"
> +mi_gdb_test "-stack-list-variables 2" "${stack_test4_regx}" \
> + "-stack-list-variables 2 at third level"
> +
> +mi_gdb_test \
> + "-break-insert --source ${srcfile} --line ${bp_line5}" \
> + "\\^done.*source ${srcfile} \\-line ${bp_line5}.*" \
> + "bp at outermost level last"
> +mi_execute_to "exec-continue" "breakpoint-hit" ".*" ".*" ".*" "${bp_line5}" \
> + { "" "disp=\"keep\"" } "continue to outermost level last"
> +mi_gdb_test "-stack-list-locals 0" \
> + "\\^done,locals=\\\[name=\"a\",name=\"val1\",name=\"val2\"\\\]" \
> + "-stack-list-locals 0 at outermost level last"
> +mi_gdb_test "-stack-list-variables 0" \
> + "\\^done,variables=\\\[{name=\"a\"},{name=\"val1\"},{name=\"val2\"}\\\]" \
> + "-stack-list-variables at outermost level last"
> +mi_gdb_test "-stack-list-locals 2" "${stack_test5_regx}" \
> + "-stack-list-locals 2 at outermost level last"
> +mi_gdb_test "-stack-list-variables 2" "${stack_test5_regx}" \
> + "-stack-list-variables 2 at outermost level last"
next prev parent reply other threads:[~2024-01-16 15:41 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-22 8:12 [PATCH v6 0/2] add annotation in 'info locals' command for variables shadowing case Abdul Basit Ijaz
2023-11-22 8:13 ` [PATCH v6 1/2] gdb: " Abdul Basit Ijaz
2023-11-22 14:37 ` Eli Zaretskii
2024-01-16 15:40 ` Guinevere Larsen
2023-11-22 8:13 ` [PATCH v6 2/2] gdb: add shadowed field in '-stack-list-locals/variables' mi commands Abdul Basit Ijaz
2023-11-22 14:38 ` Eli Zaretskii
2024-01-16 15:41 ` Guinevere Larsen [this message]
2023-12-28 11:28 ` [PING][PATCH v6 0/2] add annotation in 'info locals' command for variables shadowing case Ijaz, Abdul B
2024-01-15 12:29 ` [PING 2][PATCH " Ijaz, Abdul B
2024-03-04 18:10 ` [PING 3][PATCH " Ijaz, Abdul B
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=23a114c2-6103-401b-b10b-b2f09981a812@redhat.com \
--to=blarsen@redhat.com \
--cc=abdul.b.ijaz@intel.com \
--cc=aburgess@redhat.com \
--cc=christina.schimpe@intel.com \
--cc=eliz@gnu.org \
--cc=gdb-patches@sourceware.org \
--cc=lsix@lancelotsix.com \
--cc=pedro@palves.net \
--cc=philippe.waroquiers@skynet.be \
--cc=tankut.baris.aktemur@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).