📄 classes.exp
字号:
setup_xfail_format "DWARF 1" send_gdb "ptype class E\n" gdb_expect { -re "type = class E : public D \{${ws}public:${ws}int e;${ws}int x;${ws}E & operator=\\(E const &\\);${ws}E\\(E const &\\);${ws}E\\(void\\);${ws}\}$nl$gdb_prompt $" { pass "ptype class E" } -re "type = class E : public D \{${ws}public:${ws}int e;${ws}int x;((${ws}E & operator=\\(E const &\\);)|(${ws}E\\(E const &\\);)|(${ws}E\\(void\\);))*${ws}\}$nl$gdb_prompt $" { pass "ptype class E" } -re ".*$gdb_prompt $" { fail "ptype class E" } timeout { fail "ptype class E (timeout)" return } } send_gdb "ptype class vA\n" gdb_expect { -re "type = (class|struct) vA \{(${ws}public:|)${ws}int va;${ws}int vx;${ws}vA & operator=\\(vA const &\\);${ws}vA\\(vA const &\\);${ws}vA\\(void\\);${ws}\}$nl$gdb_prompt $" { pass "ptype class vA" } -re "type = (class|struct) vA \{(${ws}public:|)${ws}int va;${ws}int vx;((${ws}vA & operator=\\(vA const &\\);)|(${ws}vA\\(vA const &\\);)|(${ws}vA\\(void\\);))*${ws}\}$nl$gdb_prompt $" { pass "ptype class vA (obsolescent gcc or gdb)" } -re ".*$gdb_prompt $" { fail "ptype class vA" } timeout { fail "ptype class vA (timeout)" return } } # Accept the form with embedded GNU style mangled virtual table constructs # for now, but with a FIXME. At some future point, gdb should use a # portable representation for the virtual table constructs. # The format of a g++ virtual base pointer. set vbptr "(_vb\[$.\]|__vb_)\[0-9\]?" setup_xfail_format "DWARF 1" send_gdb "ptype class vB\n" gdb_expect { -re "type = class vB : public virtual vA \{${ws}private:${ws}vA \\*${vbptr}vA;${ws}public:${ws}int vb;${ws}int vx;${ws}vB & operator=\\(vB const &\\);${ws}vB\\(int, vB const &\\);${ws}vB\\(int\\);${ws}\}$nl$gdb_prompt $" { setup_xfail "*-*-*" fail "ptype class vB (FIXME: non-portable virtual table constructs)" } -re "type = class vB : public virtual vA \{${ws}public:${ws}int vb;${ws}int vx;${ws}\}$nl$gdb_prompt $" { pass "ptype class vB (aCC)" } -re "type = class vB : public virtual vA \{${ws}private:${ws}vA \\*_vb.vA;${ws}public:${ws}int vb;${ws}int vx;((${ws}vB & operator=\\(vB const &\\);)|(${ws}vB\\(int, vB const &\\);)|(${ws}vB\\(int\\);))*${ws}\}$nl$gdb_prompt $" { setup_xfail "*-*-*" fail "ptype class vB (FIXME) (obsolescent gcc or gdb)" } -re ".*$gdb_prompt $" { fail "ptype class vB" } timeout { fail "ptype class vB (timeout)" return } } # Accept the form with embedded GNU style mangled virtual table constructs # for now, but with a FIXME. At some future point, gdb should use a # portable representation for the virtual table constructs. setup_xfail_format "DWARF 1" send_gdb "ptype class vC\n" gdb_expect { -re "type = class vC : public virtual vA \{${ws}private:${ws}vA \\*${vbptr}vA;${ws}public:${ws}int vc;${ws}int vx;${ws}vC & operator=\\(vC const &\\);${ws}vC\\(int, vC const &\\);${ws}vC\\(int\\);${ws}\}$nl$gdb_prompt $" { setup_xfail "*-*-*" fail "ptype class vC (FIXME: non-portable virtual table constructs)" } -re "type = class vC : public virtual vA \{${ws}public:${ws}int vc;${ws}int vx;${ws}\}$nl$gdb_prompt $" { pass "ptype class vC (aCC)" } -re "type = class vC : public virtual vA \{${ws}private:${ws}vA \\*_vb.vA;${ws}public:${ws}int vc;${ws}int vx;((${ws}vC & operator=\\(vC const &\\);)|(${ws}vC\\(int, vC const &\\);)|(${ws}vC\\(int\\);))*${ws}\}$nl$gdb_prompt $" { setup_xfail "*-*-*" fail "ptype class vC (FIXME) (obsolescent gcc or gdb)" } -re ".*$gdb_prompt $" { fail "ptype class vC" } timeout { fail "ptype class vC (timeout)" return } } # Accept the form with embedded GNU style mangled virtual table constructs # for now, but with a FIXME. At some future point, gdb should use a # portable representation for the virtual table constructs. 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;${ws}vD & operator=\\(vD const &\\);${ws}vD\\(int, vD const &\\);${ws}vD\\(int\\);${ws}\}$nl$gdb_prompt $" { setup_xfail "*-*-*" fail "ptype class vD (FIXME: non-portable virtual table constructs)" } -re "type = class vD : public virtual vB, public virtual vC \{${ws}public:${ws}int vd;${ws}int vx;${ws}\}$nl$gdb_prompt $" { pass "ptype class vD (aCC)" } -re "type = class vD : public virtual vB, public virtual vC \{${ws}private:${ws}vC \\*_vb.vC;${ws}vB \\*_vb.vB;${ws}public:${ws}int vd;${ws}int vx;((${ws}vD & operator=\\(vD const &\\);)|(${ws}vD\\(int, vD const &\\);)|(${ws}vD\\(int\\);))*${ws}\}$nl$gdb_prompt $" { setup_xfail "*-*-*" fail "ptype class vD (FIXME) (obsolescent gcc or gdb)" } -re ".*$gdb_prompt $" { fail "ptype class vD" } timeout { fail "ptype class vD (timeout)" return } } # Accept the form with embedded GNU style mangled virtual table constructs # for now, but with a FIXME. At some future point, gdb should use a # portable representation for the virtual table constructs. 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;${ws}vE & operator=\\(vE const &\\);${ws}vE\\(int, vE const &\\);${ws}vE\\(int\\);${ws}\}$nl$gdb_prompt $" { setup_xfail "*-*-*" fail "ptype class vE (FIXME: non-portable virtual table constructs)" } -re "type = class vE : public virtual vD \{${ws}public:${ws}int ve;${ws}int vx;${ws}\}$nl$gdb_prompt $" { pass "ptype class vE (aCC)" } -re "type = class vE : public virtual vD \{${ws}private:${ws}vD \\*_vb.vD;${ws}public:${ws}int ve;${ws}int vx;((${ws}vE & operator=\\(vE const &\\);)|(${ws}vE\\(int, vE const &\\);)|(${ws}vE\\(int\\);))*${ws}\}$nl$gdb_prompt $" { setup_xfail "*-*-*" fail "ptype class vE (FIXME) (obsolescent gcc or gdb)" } -re ".*$gdb_prompt $" { fail "ptype class vE" } timeout { fail "ptype class vE (timeout)" return } } setup_xfail_format "DWARF 1" send_gdb "ptype class Base1\n" gdb_expect { -re "type = class Base1 \{${ws}public:${ws}int x;${ws}Base1 & operator=\\(Base1 const &\\);${ws}Base1\\(Base1 const &\\);${ws}Base1\\(int\\);${ws}\}$nl$gdb_prompt $" { pass "ptype class Base1" } -re "type = class Base1 \{${ws}public:${ws}int x;((${ws}Base1 & operator=\\(Base1 const &\\);)|(${ws}Base1\\(Base1 const &\\);)|(${ws}Base1\\(int\\);))*${ws}\}$nl$gdb_prompt $" { pass "ptype class Base1 (obsolescent gcc or gdb)" } -re ".*$gdb_prompt $" { fail "ptype class Base1" } timeout { fail "ptype class Base1 (timeout)" return } } setup_xfail_format "DWARF 1" send_gdb "ptype class Foo\n" gdb_expect { -re "type = class Foo \{${ws}public:${ws}int x;${ws}int y;${ws}static int st;\r\n${ws}Foo\\(int, int\\);${ws}int operator!.void.;${ws}operator int.void.;${ws}int times.int.;$nl\}$nl$gdb_prompt $" { pass "ptype class Foo(aCC)" } -re "type = class Foo \{${ws}public:${ws}int x;${ws}int y;${ws}static int st;${ws}Foo & operator=\\(Foo const &\\);${ws}Foo\\(Foo const &\\);${ws}Foo\\(int, int\\);${ws}int operator!\\(void\\);${ws}operator int\\(void\\);${ws}int times\\(int\\);${ws}\}$nl$gdb_prompt $" { pass "ptype class Foo" } -re "type = class Foo \{${ws}public:${ws}int x;${ws}int y;${ws}static int st;((${ws}Foo & operator=\\(Foo const &\\);)|(${ws}Foo\\(Foo const &\\);)|(${ws}Foo\\(int, int\\);)|(${ws}int operator!\\(void\\);)|(${ws}int operator int\\(void\\);)|(${ws}int times\\(int\\);))*${ws}\}$nl$gdb_prompt $" { pass "ptype class Foo (obsolescent gcc or gdb)" } -re ".*$gdb_prompt $" { fail "ptype class Foo" } timeout { fail "ptype class Foo (timeout)" return } } setup_xfail_format "DWARF 1" send_gdb "ptype class Bar\n" gdb_expect { -re "type = class Bar : public Base1, public Foo \{${ws}public:${ws}int z;${ws}Bar & operator=\\(Bar const &\\);${ws}Bar\\(Bar const &\\);${ws}Bar\\(int, int, int\\);${ws}\}$nl$gdb_prompt $" { pass "ptype class Bar" } -re "type = class Bar : public Base1, public Foo \{${ws}public:${ws}int z;((${ws}Bar & operator=\\(Bar const &\\);)|(${ws}Bar\\(Bar const &\\);)|(${ws}Bar\\(int, int, int\\);))*${ws}\}$nl$gdb_prompt $" { pass "ptype class Bar (obsolescent gcc or gdb)" } -re ".*$gdb_prompt $" { fail "ptype class Bar" } timeout { fail "ptype class Bar (timeout)" return } }}## Test simple access to class members.#proc test_non_inherited_member_access {} { global gdb_prompt # Print non-inherited members of g_A. gdb_test "print g_A.a" ".* = 1" "g_A.a incorrect" gdb_test "print g_A.x" ".* = 2" "g_A.x incorrect" # Print non-inherited members of g_B. gdb_test "print g_B.b" ".* = 5" "g_B.b incorrect" gdb_test "print g_B.x" ".* = 6" "g_B.x incorrect" # Print non-inherited members of g_C. gdb_test "print g_C.c" ".* = 9" "g_C.c incorrect" gdb_test "print g_C.x" ".* = 10" "g_C.x incorrect" # Print non-inherited members of g_D. gdb_test "print g_D.d" ".* = 19" "g_D.d incorrect" gdb_test "print g_D.x" ".* = 20" "g_D.x incorrect" # Print non-inherited members of g_E. gdb_test "print g_E.e" ".* = 31" "g_E.e incorrect" gdb_test "print g_E.x" ".* = 32" "g_E.x incorrect"}## Try access to non-members that are members of another class.# Should give errors.#proc test_wrong_class_members {} { global gdb_prompt gdb_test "print g_A.b" "There is no member( or method|) named b." "print g_A.b should be error" gdb_test "print g_B.c" "There is no member( or method|) named c." "print g_B.c should be error" gdb_test "print g_B.d" "There is no member( or method|) named d." "print g_B.d should be error" gdb_test "print g_C.b" "There is no member( or method|) named b." "print g_C.b should be error" gdb_test "print g_C.d" "There is no member( or method|) named d." "print g_C.d should be error" gdb_test "print g_D.e" "There is no member( or method|) named e." "print g_D.e should be error"}## Try access to non-members that are not members of any class.# Should give errors.#proc test_nonexistant_members {} { global gdb_prompt gdb_test "print g_A.y" "There is no member( or method|) named y." "print g_A.y should be error" gdb_test "print g_B.z" "There is no member( or method|) named z." "print g_B.z should be error" gdb_test "print g_C.q" "There is no member( or method|) named q." "print g_C.q should be error" gdb_test "print g_D.p" "There is no member( or method|) named p." "print g_D.p should be error"}## Pointers to class members#proc test_pointers_to_class_members {} { global gdb_prompt global decimal global nl gdb_test "print Bar::z" ".* = .int\[ \]*\[( \]*Bar::&\[)\]+\[ \]*Bar::z" "print Bar::z"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -