📄 inherit.exp
字号:
-re "type = class vC : public virtual vA \{$nl\[ \]*private:$nl\[ \]*vA \\*${vbptr}vA;$nl\[ \]*public:$nl\[ \]*int vc;$nl\[ \]*int vx;$nl.*\}$nl$gdb_prompt $" { pass "ptype g_vC" } -re "type = class vC : public virtual vA \{$nl\[ \]*public:$nl\[ \]*int vc;$nl\[ \]*int vx;$nl.*\}$nl$gdb_prompt $" { pass "ptype g_vC (aCC)" } -re ".*$gdb_prompt $" { fail "ptype g_vC" } timeout { fail "ptype g_vC (timeout)" } }}## Single virtual inheritance, print complete classes.#proc test_print_svi_classes {} { global gdb_prompt global hex global decimal global nl global vbptr # Print all members of g_vA. gdb_test "print g_vA" ".* = \{va = 1, vx = 2\}" "print g_vA" # Print all members of g_vB. setup_xfail_format "DWARF 1" send_gdb "print g_vB\n" gdb_expect { -re ".* = \{\<class vA\> = \{va = 3, vx = 4\}, vb = 5, vx = 6, Virtual table at $hex\}$nl$gdb_prompt $" { pass "print g_vB (aCC)" } -re ".* = \{\<class vA\> = \{va = 3, vx = 4\}, vb = 5, vx = 6, __vfp = $hex\}$nl$gdb_prompt $" { pass "print g_vB (aCC)" } -re ".* = \{\<vA\> = \{va = 3, vx = 4\}, ${vbptr}vA = $hex, vb = 5, vx = 6\}$nl$gdb_prompt $" { pass "print g_vB" } -re ".*invalid address 0x0.*$gdb_prompt $" { # Does not happen with gcc cygnus-2.4.5-930828 fail "print g_vB (known bug with gcc cygnus-2.4.5-930417)" # Many of the rest of these tests have the same problem. return 0 } -re ".*$gdb_prompt $" { fail "print g_vB" } timeout { fail "print g_vB (timeout)" ; return } } # Print all members of g_vC. setup_xfail_format "DWARF 1" send_gdb "print g_vC\n" gdb_expect { -re ".* = \{\<class vA\> = \{va = 7, vx = 8\}, vc = 9, vx = 10, Virtual table at $hex\}$nl$gdb_prompt $" { pass "print g_vC (aCC)" } -re ".* = \{\<class vA\> = \{va = 7, vx = 8\}, vc = 9, vx = 10, __vfp = $hex\}$nl$gdb_prompt $" { pass "print g_vC (aCC)" } -re ".* = \{\<vA\> = \{va = 7, vx = 8\}, ${vbptr}vA = $hex, vc = 9, vx = 10\}$nl$gdb_prompt $" { pass "print g_vC" } -re ".*$gdb_prompt $" { fail "print g_vC" } timeout { fail "print g_vC (timeout)" } }}## Multiple virtual inheritance, print individual members.#proc test_print_mvi_members {} { global gdb_prompt global decimal global nl # Print all members of g_vD. setup_xfail_format "DWARF 1" send_gdb "print g_vD.vA::va\n" gdb_expect { -re ".* = 19$nl$gdb_prompt $" { pass "print g_vD.vA::va" } -re ".*virtual baseclass botch.*$gdb_prompt $" { # Does not happen with gcc cygnus-2.4.5-930828 fail "print g_vD.vA::va (known bug with gcc cygnus-2.4.5-930417)" # Many of the rest of these tests have the same problem. return 0 } -re ".*$gdb_prompt $" { fail "print g_vD.vA::va" } timeout { fail "print g_vD.vA::va (timeout)" ; return } } setup_xfail_format "DWARF 1" gdb_test "print g_vD.vA::vx" ".* = 20" "print g_vD.vA::vx" setup_xfail_format "DWARF 1" gdb_test "print g_vD.vB::vb" ".* = 21" "print g_vD.vB::vb" setup_xfail_format "DWARF 1" gdb_test "print g_vD.vB::vx" ".* = 22" "print g_vD.vB::vx" setup_xfail_format "DWARF 1" gdb_test "print g_vD.vC::vc" ".* = 23" "print g_vD.vC::vc" setup_xfail_format "DWARF 1" gdb_test "print g_vD.vC::vx" ".* = 24" "print g_vD.vC::vx" gdb_test "print g_vD.vD::vd" ".* = 25" "print g_vD.vD::vd" gdb_test "print g_vD.vD::vx" ".* = 26" "print g_vD.vD::vx" # Print all members of g_vE. setup_xfail_format "DWARF 1" gdb_test "print g_vE.vA::va" ".* = 0" "print g_vE.vA::va" setup_xfail_format "DWARF 1" gdb_test "print g_vE.vA::vx" ".* = 0" "print g_vE.vA::vx" setup_xfail_format "DWARF 1" gdb_test "print g_vE.vB::vb" ".* = 0" "print g_vE.vB::vb" setup_xfail_format "DWARF 1" gdb_test "print g_vE.vB::vx" ".* = 0" "print g_vE.vB::vx" setup_xfail_format "DWARF 1" gdb_test "print g_vE.vC::vc" ".* = 0" "print g_vE.vC::vc" setup_xfail_format "DWARF 1" gdb_test "print g_vE.vC::vx" ".* = 0" "print g_vE.vC::vx" setup_xfail_format "DWARF 1" gdb_test "print g_vE.vD::vd" ".* = 0" "print g_vE.vD::vd" gdb_test "print g_vE.vD::vx" ".* = 0" "print g_vE.vD::vx" gdb_test "print g_vE.vE::ve" ".* = 27" "print g_vE.vE::ve" gdb_test "print g_vE.vE::vx" ".* = 28" "print g_vE.vE::vx"}## Multiple virtual inheritance, print type definitions.#proc test_ptype_mvi {} { global gdb_prompt global ws global nl global vbptr setup_xfail_format "DWARF 1" send_gdb "ptype vD\n" gdb_expect { -re "type = class vD : public virtual vB, public virtual vC \{${ws}private:${ws}vC \\*${vbptr}vC;${ws}vB \\*${vbptr}vB;${ws}public:${ws}int vd;${ws}int vx;$nl.*\}.*$gdb_prompt $" { pass "ptype vD" } -re ".*class vD : public virtual vB, public virtual vC \{${ws}public:${ws}int vd;${ws}int vx;.*\}.*$gdb_prompt $" { pass "ptype vD" } -re ".*$gdb_prompt $" { fail "ptype vD" } timeout { fail "(timeout) ptype vD" } } setup_xfail_format "DWARF 1" send_gdb "ptype class vD\n" gdb_expect { -re "type = class vD : public virtual vB, public virtual vC \{${ws}private:${ws}vC \\*${vbptr}vC;${ws}vB \\*${vbptr}vB;${ws}public:${ws}int vd;${ws}int vx;$nl.*\}.*$gdb_prompt $" { pass "ptype class vD" } -re ".*class vD : public virtual vB, public virtual vC \{${ws}public:${ws}int vd;${ws}int vx;.*\}.*$gdb_prompt $" { pass "ptype class vD" } -re ".*$gdb_prompt $" { fail "ptype class vD" } timeout { fail "(timeout) ptype class vD" } } setup_xfail_format "DWARF 1" send_gdb "ptype g_vD\n" gdb_expect { -re "type = class vD : public virtual vB, public virtual vC \{${ws}private:${ws}vC \\*${vbptr}vC;${ws}vB \\*${vbptr}vB;${ws}public:${ws}int vd;${ws}int vx;$nl.*\}.*$gdb_prompt $" { pass "ptype g_vD" } -re ".*class vD : public virtual vB, public virtual vC \{${ws}public:${ws}int vd;${ws}int vx;\r\n.*\}.*$gdb_prompt $" { pass "ptype g_vD" } -re ".*$gdb_prompt $" { fail "ptype g_vD" } timeout { fail "(timeout) ptype g_vD" } } setup_xfail_format "DWARF 1" send_gdb "ptype vE\n" gdb_expect { -re "type = class vE : public virtual vD \{${ws}private:${ws}vD \\*${vbptr}vD;${ws}public:${ws}int ve;${ws}int vx;$nl.*\}.*$gdb_prompt $" { pass "ptype vE" } -re ".*class vE : public virtual vD \{${ws}public:${ws}int ve;${ws}int vx;\r\n.*\}.*$gdb_prompt $" { pass "ptype vE" } -re ".*$gdb_prompt $" { fail "ptype vE" } timeout { fail "(timeout) ptype vE" } } setup_xfail_format "DWARF 1" send_gdb "ptype class vE\n" gdb_expect { -re "type = class vE : public virtual vD \{${ws}private:${ws}vD \\*${vbptr}vD;${ws}public:${ws}int ve;${ws}int vx;$nl.*\}.*$gdb_prompt $" { pass "ptype class vE" } -re "type = class vE : public virtual vD \{${ws}public:${ws}int ve;${ws}int vx;\r\n.*\}.*$gdb_prompt $" { pass "ptype class vE" } -re ".*$gdb_prompt $" { fail "ptype class vE" } timeout { fail "(timeout) ptype class vE" } } setup_xfail_format "DWARF 1" send_gdb "ptype g_vE\n" gdb_expect { -re "type = class vE : public virtual vD \{${ws}private:${ws}vD \\*${vbptr}vD;${ws}public:${ws}int ve;${ws}int vx;$nl.*\}.*$gdb_prompt $" { pass "ptype g_vE" } -re "type = class vE : public virtual vD \{${ws}public:${ws}int ve;${ws}int vx;\r\n.*\}.*$gdb_prompt $" { pass "ptype g_vE" } -re ".*$gdb_prompt $" { fail "ptype g_vE" } timeout { fail "(timeout) ptype g_vE" } }}## Multiple virtual inheritance, print complete classes.#proc test_print_mvi_classes {} { global gdb_prompt global hex global decimal global nl global vbptr # Print all members of g_vD. setup_xfail_format "DWARF 1" send_gdb "print g_vD\n" gdb_expect { -re ".* = \{\<class vB\> = \{\<class vA\> = \{va = 19, vx = 20\}, vb = 21, vx = 22, Virtual table at $hex\}, \<class vC\> = \{vc = 23, vx = 24, Virtual table at $hex\}, vd = 25, vx = 26, Virtual table at $hex\}$nl$gdb_prompt $" { pass "print g_vD (aCC)" } -re ".* = \{\<class vB\> = \{\<class vA\> = \{va = 19, vx = 20\}, vb = 21, vx = 22, __vfp = $hex\}, \<class vC\> = \{vc = 23, vx = 24, __vfp = $hex\}, vd = 25, vx = 26, __vfp = $hex\}$nl$gdb_prompt $" { pass "print g_vD (aCC)" } -re ".* = \{\<vB\> = \{\<vA\> = \{va = 19, vx = 20\}, ${vbptr}vA = $hex, vb = 21, vx = 22\}, \<vC\> = \{${vbptr}vA = $hex, vc = 23, vx = 24\}, ${vbptr}vC = $hex, ${vbptr}vB = $hex, vd = 25, vx = 26\}$nl$gdb_prompt $" { pass "print g_vD" } -re ".*invalid address 0x0.*$gdb_prompt $" { # Does not happen with gcc cygnus-2.4.5-930828 fail "print g_vD (known bug with gcc cygnus-2.4.5-930417)" # Many of the rest of these tests have the same problem. return 0 } -re ".*$gdb_prompt $" { fail "print g_vD" } timeout { fail "print g_vD (timeout)" ; return } } # Print all members of g_vE. setup_xfail_format "DWARF 1" send_gdb "print g_vE\n" gdb_expect { -re ".* = \{\<class vD\> = \{\<class vB\> = \{\<class vA\> = \{va = 0, vx = 0\}, vb = 0, vx = 0, Virtual table at $hex\}, \<class vC\> = \{vc = 0, vx = 0, Virtual table at $hex\}, vd = 0, vx = 0, Virtual table at $hex\}, ve = 27, vx = 28, Virtual table at $hex\}$nl$gdb_prompt $" { pass "print g_vE (aCC)" } -re ".* = \{\<class vD\> = \{\<class vB\> = \{\<class vA\> = \{va = 0, vx = 0\}, vb = 0, vx = 0, __vfp = $hex\}, \<class vC\> = \{vc = 0, vx = 0, __vfp = $hex\}, vd = 0, vx = 0, __vfp = $hex\}, ve = 27, vx = 28, __vfp = $hex\}$nl$gdb_prompt $" { pass "print g_vE (aCC)" } -re ".* = \{\<vD\> = \{\<vB\> = \{\<vA\> = \{va = 0, vx = 0\}, ${vbptr}vA = $hex, vb = 0, vx = 0\}, \<vC\> = \{${vbptr}vA = $hex, vc = 0, vx = 0\}, ${vbptr}vC = $hex, ${vbptr}vB = $hex, vd = 0, vx = 0\}, ${vbptr}vD = $hex, ve = 27, vx = 28\}$nl$gdb_prompt $" { pass "print g_vE" } -re ".*$gdb_prompt $" { fail "print g_vE" } timeout { fail "print g_vE (timeout)" } }}proc do_tests {} { global prms_id global bug_id global subdir global objdir global srcdir global binfile set prms_id 0 set bug_id 0 # Start with a fresh gdb. gdb_exit gdb_start gdb_reinitialize_dir $srcdir/$subdir gdb_load $binfile gdb_test "set language c++" "" gdb_test "set width 0" "" # Get the debug format for the compiled test case. if { ![ runto_main] } { gdb_suppress_tests; } else { get_debug_format } test_ptype_si test_ptype_mi test_ptype_vi test_ptype_mvi gdb_stop_suppressing_tests; if { ![ runto 'inheritance2(void)' ] } { gdb_suppress_tests; } test_print_si_members test_print_si_classes test_print_mi_members test_print_mi_classes test_print_anon_union gdb_stop_suppressing_tests; if { ![ runto 'inheritance4(void)' ] } { gdb_suppress_tests; } test_print_svi_members test_print_svi_classes test_print_mvi_members test_print_mvi_classes}do_tests
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -