diff options
Diffstat (limited to 'gdb/testsuite/gdb.python/py-mi.exp')
-rw-r--r-- | gdb/testsuite/gdb.python/py-mi.exp | 163 |
1 files changed, 149 insertions, 14 deletions
diff --git a/gdb/testsuite/gdb.python/py-mi.exp b/gdb/testsuite/gdb.python/py-mi.exp index d3f44b2..30d6f32 100644 --- a/gdb/testsuite/gdb.python/py-mi.exp +++ b/gdb/testsuite/gdb.python/py-mi.exp @@ -48,23 +48,53 @@ mi_gdb_test "python execfile ('${srcdir}/${subdir}/${testfile}.py')" "" mi_continue_to_line [gdb_get_line_number {MI breakpoint here} ${testfile}.c] \ "step to breakpoint" -mi_create_floating_varobj container c "create container varobj" +mi_create_dynamic_varobj container c \ + "create container varobj, no pretty-printing" + +mi_list_varobj_children container { + { container.name name 1 string } + { container.len len 0 int } + { container.elements elements 1 "int ." } +} "examine container children=0, no pretty-printing" + +mi_delete_varobj container "delete varobj" + +mi_gdb_test "-enable-pretty-printing" "" + +mi_create_varobj_checked string string_1 \ + "struct string_repr" \ + "create string_1 varobj" + +mi_gdb_test "-data-evaluate-expression \"string_1 = string_2\"" ".*" \ + "assign string_1 from string_2" + +mi_gdb_test "-var-update string" \ + "\\^done,changelist=\\\[{name=\"string\",in_scope=\"true\",type_changed=\"false\",dynamic=\"1\",has_more=\"0\"}\\\]" \ + "update string varobj after assignment" + +mi_create_dynamic_varobj container c \ + "create container varobj" mi_list_varobj_children container { } "examine container children=0" mi_next "next over update 1" -mi_varobj_update_dynamic container { - { {container.\[0\]} {\[0\]} 0 int } -} "varobj update 1" +mi_varobj_update_dynamic container "varobj update 1" { + type_changed false new_num_children 1 dynamic 1 has_more 0 +} { +} { + { name {container.\[0\]} exp {\[0\]} numchild 0 type int thread-id 1 } +} mi_next "next over update 2" -mi_varobj_update_dynamic container { - { {container.\[0\]} {\[0\]} 0 int } - { {container.\[1\]} {\[1\]} 0 int } -} "varobj update 2" +mi_varobj_update_dynamic container "varobj update 2" { + type_changed false new_num_children 2 dynamic 1 has_more 0 +} { +} { + { name {container.\[1\]} exp {\[1\]} numchild 0 type int thread-id 1 } +} mi_gdb_test "-var-set-visualizer container None" \ "\\^done" \ @@ -78,19 +108,124 @@ mi_gdb_test "-var-set-visualizer container gdb.default_visualizer" \ "\\^done" \ "choose default visualizer" -mi_varobj_update_dynamic container { - { {container.\[0\]} {\[0\]} 0 int } - { {container.\[1\]} {\[1\]} 0 int } -} "varobj update after choosing default" +mi_varobj_update_dynamic container "varobj update after choosing default" { + type_changed false new_num_children 2 dynamic 1 has_more 0 +} { +} { + { name {container.\[0\]} exp {\[0\]} numchild 0 type int thread-id 1 } + { name {container.\[1\]} exp {\[1\]} numchild 0 type int thread-id 1 } +} mi_gdb_test "-var-set-visualizer container ContainerPrinter" \ "\\^done" \ "choose visualizer using expression" -mi_varobj_update_dynamic container { +mi_varobj_update_dynamic container \ + "varobj update after choosing via expression" { + type_changed false new_num_children 2 dynamic 1 has_more 0 + } { + } { + { name {container.\[0\]} exp {\[0\]} numchild 0 type int thread-id 1 } + { name {container.\[1\]} exp {\[1\]} numchild 0 type int thread-id 1 } + } + +mi_list_varobj_children_range container 1 2 2 { + { {container.\[1\]} {\[1\]} 0 int } +} "list varobj children after selecting child range" + +mi_list_varobj_children_range container -1 -1 2 { { {container.\[0\]} {\[0\]} 0 int } { {container.\[1\]} {\[1\]} 0 int } -} "varobj update after choosing via expression" +} "list varobj children after resetting child range" + +mi_next "next over update 3" + +mi_gdb_test "-var-set-update-range container 0 1" \ + "\\^done" \ + "set update range" + +# This should truncate the list. +mi_list_varobj_children container { + { {container.\[0\]} {\[0\]} 0 int } +} "list children after setting update range" + +# This should return just the items in [1,2). +mi_list_varobj_children_range container 1 2 2 { + { {container.\[1\]} {\[1\]} 0 int } +} "list selected children after setting range" + +# This should not be affected by the previous list-children request. +mi_list_varobj_children container { + { {container.\[0\]} {\[0\]} 0 int } +} "list children after listing selected range" + +mi_next "next over update 4" + +# This should only show the first child, because the update range has +# been set. +mi_varobj_update_dynamic container \ + "update after next with restricted range" { + type_changed false new_num_children 1 dynamic 1 has_more 1 + } { + { name {container.\[0\]} in_scope true type_changed false dynamic 1 has_more 0 } + } { + } + +mi_gdb_test "-var-set-update-range container 3 4" \ + "\\^done" \ + "set update range with non-zero start" + +# Elements were updated but should not be reported. +mi_varobj_update_dynamic container \ + "update varobj with change outside selected range" { + type_changed false new_num_children 3 dynamic 1 has_more 0 + } { + } { + } + +mi_next "next over update 5" + +# Regression test: examine an object that has no children, then update +# it to ensure that we don't print the children. +mi_create_dynamic_varobj container2 c2 \ + "create second container varobj" + +mi_gdb_test "-var-update container2" \ + "\\^done,changelist=.." \ + "update varobj, no children requested" + +mi_next "next over update 6" + +# Now container2 has an element -- and an update should mention that +# it has_more. But, because we did not request children, we still +# should not actually see them. +mi_varobj_update_dynamic container2 \ + "update varobj 2, no children requested" { + type_changed false dynamic 1 has_more 1 + } {} {} + +mi_continue_to_line \ + [gdb_get_line_number {MI outer breakpoint here} ${testfile}.c] \ + "step to outer breakpoint" + +mi_create_dynamic_varobj outer outer \ + "create outer varobj" + +mi_list_varobj_children outer { + { outer.s s 2 "struct substruct" } + { outer.x x 0 "int" } +} "list children of outer" + +mi_list_varobj_children outer.s { + { outer.s.a a 0 int } + { outer.s.b b 0 int } +} "list children of outer.s" + +mi_next "next over outer update" + +mi_gdb_test "-var-update outer" \ + ".done,changelist=.{name=\"outer.s.a\",in_scope=\"true\",type_changed=\"false\",dynamic=\"1\",has_more=\"0\"}." \ + "update after updating element of outer" mi_continue_to_line \ [gdb_get_line_number {Another MI breakpoint} ${testfile}.c] \ |