binutils-gdb/gdb/testsuite/gdb.python
Leszek Swirski via gdb-patches 0625771b9e 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.
2018-02-02 14:03:25 -05:00
..
amd64-py-framefilter-invalidarg.S Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
lib-types.cc Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
lib-types.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-arch.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-arch.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-as-string.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-as-string.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-bad-printers.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-bad-printers.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-bad-printers.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-block.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-block.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-breakpoint-create-fail.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-breakpoint-create-fail.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-breakpoint-create-fail.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-breakpoint.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-breakpoint.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-caller-is.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-caller-is.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-cmd.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-cmd.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-completion.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-completion.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-error.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-error.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-events-shlib.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-events.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-events.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-events.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-evsignal.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-evthreads.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-evthreads.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-explore-cc.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-explore.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-explore.cc Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-explore.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-finish-breakpoint.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-finish-breakpoint.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-finish-breakpoint.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-finish-breakpoint2.cc Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-finish-breakpoint2.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-finish-breakpoint2.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-frame-args.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-frame-args.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-frame-args.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-frame-inline.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-frame-inline.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-frame.c
py-frame.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-framefilter-gdb.py.in Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-framefilter-invalidarg-gdb.py.in Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-framefilter-invalidarg.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-framefilter-invalidarg.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-framefilter-mi.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-framefilter-mi.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-framefilter.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-framefilter.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-framefilter.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-function.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-inferior.c
py-inferior.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-infthread.c
py-infthread.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-lazy-string.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-lazy-string.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-linetable.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-linetable.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-linetable.S Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-lookup-type.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-mi-events-gdb.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-mi-events.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-mi-events.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-mi-objfile-gdb.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-mi-objfile.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-mi-objfile.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-mi.exp MI: Allow non-raw varobj evaluation 2018-02-02 14:03:25 -05:00
py-objfile-script-gdb.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-objfile-script.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-objfile-script.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-objfile.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-objfile.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-parameter.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-pp-integral.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-pp-integral.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-pp-integral.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-pp-maint.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-pp-maint.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-pp-maint.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-pp-re-notag.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-pp-re-notag.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-pp-re-notag.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-pp-registration.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-pp-registration.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-pp-registration.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-prettyprint.c MI: Allow non-raw varobj evaluation 2018-02-02 14:03:25 -05:00
py-prettyprint.exp MI: Allow non-raw varobj evaluation 2018-02-02 14:03:25 -05:00
py-prettyprint.py MI: Allow non-raw varobj evaluation 2018-02-02 14:03:25 -05:00
py-progspace.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-progspace.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-prompt.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-prompt.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-rbreak-func2.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-rbreak.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-rbreak.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-record-btrace-threads.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-record-btrace-threads.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-record-btrace.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-record-btrace.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-record-full.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-record-full.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-recurse-unwind.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-recurse-unwind.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-recurse-unwind.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-rvalue-ref-value-cc.cc Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-rvalue-ref-value-cc.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-section-script.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-section-script.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-section-script.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-shared-sl.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-shared.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-shared.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-strfns.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-strfns.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-symbol.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-symbol.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-symtab.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-sync-interp.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-sync-interp.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-template.cc Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-template.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-thrhandle.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-thrhandle.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-type.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-type.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-typeprint.cc Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-typeprint.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-typeprint.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-unwind-maint.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-unwind-maint.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-unwind-maint.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-unwind.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-unwind.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-unwind.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-value-cc.cc Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-value-cc.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-value.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-value.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-xmethods.cc Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-xmethods.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
py-xmethods.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
python-1.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
python.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
python.exp Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
source1 Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
source2.py Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00