aboutsummaryrefslogtreecommitdiff
path: root/gdb/varobj.c
diff options
context:
space:
mode:
authorLeszek Swirski via gdb-patches <gdb-patches@sourceware.org>2018-02-01 23:23:28 -0500
committerSimon Marchi <simon.marchi@ericsson.com>2018-02-02 14:03:25 -0500
commit0625771b9e29116dc1fb0b597501f18e4bb0e18c (patch)
tree53711d61422300ab0dc3bb659c6820df726ee6aa /gdb/varobj.c
parent5bb0830d10b19230f9615694fa3c1230b32794b9 (diff)
downloadbinutils-0625771b9e29116dc1fb0b597501f18e4bb0e18c.zip
binutils-0625771b9e29116dc1fb0b597501f18e4bb0e18c.tar.gz
binutils-0625771b9e29116dc1fb0b597501f18e4bb0e18c.tar.bz2
MI: Allow non-raw varobj evaluation
Make the MI variable object expression evaluation, with the -var-evaluate-expression command, recursively call pretty printers, to match the output of normal expression printing. Consider the following code: struct Foo { int val; }; struct Wrapper { Foo foo; }; int main() { Wrapper w; w.foo.val = 23; } and this pretty printer file: import gdb.printing class FooPrinter: def __init__(self, val): self.val = val def to_string(self): return "Foo" + str(self.val["val"]) class WrapperPrinter: def __init__(self, val): self.val = val def to_string(self): return self.val["foo"] test_printer = gdb.printing.RegexpCollectionPrettyPrinter("test") test_printer.add_printer('Foo', '^Foo$', FooPrinter) test_printer.add_printer('Wrapper', '^Wrapper$', WrapperPrinter) gdb.printing.register_pretty_printer(None, test_printer) Setting a breakpoint at the end of the function, we call the following commands: -enable-pretty-printing ^done -var-create var_w @ w ^done,name="var_w",numchild="0",value="{val = 23}",type="Wrapper",dynamic="1",has_more="0" -var-create var_w_foo @ w.foo ^done,name="var_w_foo",numchild="0",value="Foo23",type="Foo",dynamic="1",has_more="0" -var-evaluate-expression var_w ^done,value="{val = 23}" -var-evaluate-expression var_w_foo ^done,value="Foo23" -data-evaluate-expression w ^done,value="Foo23" -data-evaluate-expression w.foo ^done,value="Foo23" So, in the -var-evaluate-expression var_w case, we print the "raw" value of w.foo, while in the -data-evaluate-expression w case, we print the pretty printed w.foo value. After this patch, all of the above print "Foo23". gdb/ChangeLog: * varobj.c (varobj_formatted_print_options): Allow recursive pretty printing if pretty printing is enabled. gdb/testsuite/ChangeLog: * gdb.python/py-prettyprint.c (struct to_string_returns_value_inner, struct to_string_returns_value_wrapper): New. (main): Add tsrvw variable. * gdb.python/py-prettyprint.py (ToStringReturnsValueInner, ToStringReturnsValueWrapper): New classes. (register_pretty_printers): Register new pretty-printers. * gdb.python/py-prettyprint.exp (run_lang_tests): Test printing recursive pretty printer. * gdb.python/py-mi.exp: Likewise.
Diffstat (limited to 'gdb/varobj.c')
-rw-r--r--gdb/varobj.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/gdb/varobj.c b/gdb/varobj.c
index b6a2d8f..f23243f 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -2274,7 +2274,7 @@ varobj_formatted_print_options (struct value_print_options *opts,
{
get_formatted_print_options (opts, format_code[(int) format]);
opts->deref_ref = 0;
- opts->raw = 1;
+ opts->raw = !pretty_printing;
}
std::string