mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 14:49:38 +08:00
Fix bug in -var-evaluate-expression
This bug points out that if one uses -var-set-visualizer with "None" -- to disable a pretty-printer for a varobj -- then -var-evaluate-expression will still use pretty-printing. This is a combination of bugs. First, setting the visualizer does not update the display text; and second, computing the display text should use "raw" when Python is available but no visualizer is desired. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=11738 Reviewed-by: Keith Seitz <keiths@redhat.com>
This commit is contained in:
@ -21,6 +21,8 @@ struct test {
|
|||||||
|
|
||||||
struct test tval = {23};
|
struct test tval = {23};
|
||||||
|
|
||||||
|
struct test *test_ptr = &tval;
|
||||||
|
|
||||||
int main () {
|
int main () {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -47,3 +47,15 @@ mi_gdb_test "-var-create tval * tval" \
|
|||||||
|
|
||||||
mi_gdb_test "-var-list-children --all-values tval" \
|
mi_gdb_test "-var-list-children --all-values tval" \
|
||||||
".*value=.*flicker.*"
|
".*value=.*flicker.*"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-create test_ptr * test_ptr" \
|
||||||
|
"\\^done.*"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-evaluate-expression test_ptr" \
|
||||||
|
"\\^done,value=\"map\""
|
||||||
|
mi_gdb_test "-var-set-visualizer test_ptr None" \
|
||||||
|
"\\^done.*"
|
||||||
|
# mi_gdb_test "-var-update test_ptr" ".*"
|
||||||
|
mi_gdb_test "-var-evaluate-expression test_ptr" \
|
||||||
|
"\\^done,value=\"$hex.*\"" \
|
||||||
|
"evaluate without visualizer"
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import gdb
|
||||||
import gdb.printing
|
import gdb.printing
|
||||||
|
|
||||||
|
|
||||||
@ -30,6 +31,7 @@ def str_lookup_function(val):
|
|||||||
lookup_tag = val.type.tag
|
lookup_tag = val.type.tag
|
||||||
if lookup_tag == "test":
|
if lookup_tag == "test":
|
||||||
return TestPrinter(val)
|
return TestPrinter(val)
|
||||||
|
if val.type.code == gdb.TYPE_CODE_PTR and val.type.target().tag == "test":
|
||||||
|
return TestPrinter(val.dereference())
|
||||||
|
|
||||||
gdb.printing.register_pretty_printer(None, str_lookup_function)
|
gdb.printing.register_pretty_printer(None, str_lookup_function)
|
||||||
|
@ -1393,6 +1393,9 @@ varobj_set_visualizer (struct varobj *var, const char *visualizer)
|
|||||||
/* If there are any children now, wipe them. */
|
/* If there are any children now, wipe them. */
|
||||||
varobj_delete (var, 1 /* children only */);
|
varobj_delete (var, 1 /* children only */);
|
||||||
var->num_children = -1;
|
var->num_children = -1;
|
||||||
|
|
||||||
|
/* Also be sure to reset the print value. */
|
||||||
|
varobj_set_display_format (var, var->format);
|
||||||
#else
|
#else
|
||||||
error (_("Python support required"));
|
error (_("Python support required"));
|
||||||
#endif
|
#endif
|
||||||
@ -2212,6 +2215,12 @@ varobj_value_get_print_value (struct value *value,
|
|||||||
return "{...}";
|
return "{...}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* If we've made it here, we don't want a pretty-printer --
|
||||||
|
if we had one, it would already have been used. */
|
||||||
|
opts.raw = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user