📄 member-ptr.exp
字号:
# Try to dereference the pointer to data member without any objectsend_gdb "print *pmi\n"gdb_expect { -re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" { pass "attempt to print ptr to member without object" } -re ".*$gdb_prompt $" { fail "attempt to print ptr to member without object" } timeout { fail "(timeout) attempt to print ptr to member without object" }}# Try to ptype a dereference of the pointer to data member without any objectsend_gdb "ptype *pmi\n"gdb_expect { -re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" { pass "attempt to ptype ptr to member without object" } -re ".*$gdb_prompt $" { fail "attempt to ptype ptr to member without object" } timeout { fail "(timeout) attempt to ptype ptr to member without object" }}# Ptype a pointer to a method.setup_xfail "hppa*-*-*" CLLbs16901send_gdb "ptype pmf\n"gdb_expect { -re "type = int \\( A::\\*\\)\\(\\.\\.\\.\\)\r\n$gdb_prompt $" { pass "ptype pmf" } -re ".*$gdb_prompt $" { fail "ptype pmf" } timeout { fail "(timeout) ptype pmf" }}# print a pointer to a methodsetup_xfail "hppa*-*-*" CLLbs16901send_gdb "print pmf\n"gdb_expect { -re "\\$\[0-9\]* = \\(int \\( A::\\*\\)\\(\\.\\.\\.\\)\\) \\?\\? <not supported with HP aCC>\r\n$gdb_prompt $" { pass "print pmf" } -re ".*$gdb_prompt $" { fail "print pmf" } timeout { fail "(timeout) print pmf" }}# Ptype a pointer to a pointer to a methodsetup_xfail "hppa*-*-*" CLLbs16901send_gdb "ptype pmf_p\n"gdb_expect { -re "type = int \\( A::\\*\\*\\)\\(\\.\\.\\.\\)\r\n$gdb_prompt $" { pass "ptype pmf_p" } -re ".*$gdb_prompt $" { fail "ptype pmf_p" } timeout { fail "(timeout) ptype pmf_p" }}# print a pointer to a pointer to a methodsetup_xfail "hppa*-*-*" CLLbs16901send_gdb "print pmf_p\n"gdb_expect { -re "\\$\[0-9\]* = \\(int \\( A::\\*\\*\\)\\(\\.\\.\\.\\)\\) $hex\r\n$gdb_prompt $" { pass "print pmf_p" } -re ".*$gdb_prompt $" { fail "print pmf_p" } timeout { fail "(timeout) print pmf_p" }}# print dereferenced pointer to methodsetup_xfail "hppa*-*-*" CLLbs16901send_gdb "print a.*pmf\n"gdb_expect { -re "Pointers to methods not supported with HP aCC\r\n$gdb_prompt $" { pass "print a.*pmf (known aCC limitation)" } -re ".*$gdb_prompt $" { fail "print a.*pmf" } timeout { fail "(timeout) print a.*pmf" }}# print dereferenced pointer to method, using ->*setup_xfail "hppa*-*-*" CLLbs16901send_gdb "print a_p->*pmf\n"gdb_expect { -re "Pointers to methods not supported with HP aCC\r\n$gdb_prompt $" { pass "print a_p->*pmf (known aCC limitation)" } -re ".*$gdb_prompt $" { fail "print a_p->*pmf" } timeout { fail "(timeout) print a_p->*pmf" }}# set the pointer to data membersetup_xfail "hppa*-*-*"send_gdb "set var pmf = &A::foo\n"gdb_expect { -re "Assignment to pointers to methods not implemented with HP aCC\r\n$gdb_prompt $" { pass "set var pmf (known aCC limitation)" } -re ".*$gdb_prompt $" { fail "set var pmf" } timeout { fail "(timeout) set var pmf" }}# Try to dereference the pointer to method without any objectsetup_xfail "hppa*-*-*" CLLbs16901send_gdb "print *pmf\n"gdb_expect { -re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" { pass "attempt to print ptr to method without object" } -re ".*$gdb_prompt $" { fail "attempt to print ptr to method without object" } timeout { fail "(timeout) attempt to print ptr to method without object" }}# Try to ptype a dereference of the pointer to method without any objectsend_gdb "ptype *pmi\n"gdb_expect { -re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" { pass "attempt to ptype ptr to member without object" } -re ".*$gdb_prompt $" { fail "attempt to ptype ptr to member without object" } timeout { fail "(timeout) attempt to ptype ptr to member without object" }}# Check cast of pointer to member to integersetup_xfail "hppa*-*-*" CLLbs16901send_gdb "print (int) pmi\n"gdb_expect { -re "\\$\[0-9\]* = 8\r\n$gdb_prompt $" { pass "casting pmi to int" } -re ".*$gdb_prompt $" { fail "casting pmi to int" } timeout { fail "(timeout) casting pmi to int" }}# Check cast of pointer to method to integersetup_xfail "hppa*-*-*" CLLbs16901send_gdb "print (int) pmf\n"gdb_expect { -re "Pointers to methods not supported with HP aCC\r\n$gdb_prompt $" { pass "casting pmf to int (known aCC limitation)" } -re ".*$gdb_prompt $" { fail "casting pmf to int" } timeout { fail "(timeout) casting pmf to int" }}# Try to invoke a function through a pointer to data membersetup_xfail "hppa*-*-*" CLLbs16901send_gdb "print (a.*pmi)(3)\n"gdb_expect { -re "Not implemented: function invocation through pointer to method with HP aCC\r\n$gdb_prompt $" { pass "print (a.*pmi)(3) -- error message should be different" } -re ".*$gdb_prompt $" { fail "print (a.*pmi)(3)" } timeout { fail "(timeout) print (a.*pmi)(3)" }}# Try to invoke a function through a pointer to a methodsetup_xfail "hppa*-*-*" CLLbs16901send_gdb "print (a.*pmf)(3)\n"gdb_expect { -re "Not implemented: function invocation through pointer to method with HP aCC\r\n$gdb_prompt $" { pass "print (a.*pmi)(3) -- known aCC limitation" } -re ".*$gdb_prompt $" { fail "print (a.*pmf)(3)" } timeout { fail "(timeout) print (a.*pmf)(3)" }}# Go past assignment of NULL to pmisetup_xfail "hppa*-*-*" CLLbs16901send_gdb "next\n"gdb_expect { -re "\r\n85\[ \t\]*k = \\(a.\\*pmf\\)\\(3\\);\r\n$gdb_prompt $" { pass "next past 83" } -re ".*$gdb_prompt $" { fail "next past 83" } timeout { fail "(timeout) next past 83" }}#send_gdb "print pmi\n"#gdb_expect {# -re "Attempted dereference of null pointer-to-member\r\n$gdb_prompt $" {# pass ""# }# -re ".*$gdb_prompt $" { fail "" }# timeout { fail "(timeout) " }#}# Dereference the null pointer to membersetup_xfail "hppa*-*-*" CLLbs16901send_gdb "print a.*pmi\n"gdb_expect { -re "Attempted dereference of null pointer-to-member\r\n$gdb_prompt $" { pass "print a.*NULL" } -re ".*$gdb_prompt $" { fail "print a.*NULL" } timeout { fail "(timeout) print a.*NULL" }}# Go to another part of the programsend_gdb "break 91\n"gdb_expect { -re "Breakpoint \[0-9\]*.*line 91\\.\r\n$gdb_prompt $" { pass "set break at 91" } -re ".*$gdb_prompt $" { fail "set break at 91" } timeout { fail "(timeout) set break at 91" }}setup_xfail "hppa*-*-*" CLLbs16901send_gdb "continue\n"gdb_expect { -re "Continuing\\.\r\n\r\nBreakpoint.*at.*member-ptr\\.cc:91\r\n91\[ \t]*k = \\(a.\\*pmf\\)\\(4\\);\r\n$gdb_prompt $" { pass "continue to 91" } -re ".*$gdb_prompt $" { fail "continue to 91" } timeout { fail "(timeout) continue to 91" }}# Now check again that pmi works even when not set to# something that's at the beginning of the objectsetup_xfail "hppa*-*-*" CLLbs16901send_gdb "print pmi\n"gdb_expect { -re "\\$\[0-9\]* = \\(int \\( A::\\*\\)\\) &A::jj\r\n$gdb_prompt $" { pass "print pmi (2)" } -re ".*$gdb_prompt $" { fail "print pmi (2)" } timeout { fail "(timeout) print pmi (2)" }}# print dereferenced pointer to data membersetup_xfail "hppa*-*-*" CLLbs16901send_gdb "print a.*pmi\n"gdb_expect { -re "\\$\[0-9\]* = 1331\r\n$gdb_prompt $" { pass "print a.*pmi (2)" } -re ".*$gdb_prompt $" { fail "print a.*pmi (2)" } timeout { fail "(timeout) print a.*pmi (2)" }}# print dereferenced pointer to data member# this time, dereferenced through a pointersetup_xfail "hppa*-*-*" CLLbs16901send_gdb "print a_p->*pmi\n"gdb_expect { -re "\\$\[0-9\]* = 1331\r\n$gdb_prompt $" { pass "print a->*pmi" } -re ".*$gdb_prompt $" { fail "print a->*pmi (2)" } timeout { fail "(timeout) print a->*pmi (2)" }}# p a.*pmf - fail# p pmi# p a.*pmi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -