📄 completion.exp
字号:
gdb_expect { -re ".*$gdb_prompt $" { fail "complete 'p \"break'"} timeout {fail "(timeout) complete 'p \"break'"} } } -re ".*$gdb_prompt $" { fail "complete 'p \"break'" } timeout { fail "(timeout) complete 'p \"break'" } }setup_xfail "*-*-*"send_gdb "p \"break.\t"sleep 1gdb_expect { -re "^p \"break\\.\\\x07$"\ { send_gdb "\n" gdb_expect { -re ".*$gdb_prompt $" { fail "complete 'p \"break.'"} timeout {fail "(timeout) complete 'p \"break.'"} } } -re "^p \"break\\.c\"$"\ { send_gdb "\n" gdb_expect { -re ".*$gdb_prompt $" { pass "complete 'p \"break.'"} timeout {fail "(timeout) complete 'p \"break.'"} } } -re "^p \"break\\..*$" { send_gdb "\n" gdb_expect { -re ".*$gdb_prompt $" { fail "complete 'p \"break.'"} timeout {fail "(timeout) complete 'p \"break.'"} } } -re ".*$gdb_prompt $" { fail "complete 'p \"break.'" } timeout { fail "(timeout) complete 'p \"break.'" } }send_gdb "p 'a\t"sleep 1gdb_expect { -re "^p 'a\\\x07$"\ { send_gdb "\n" gdb_expect { -re "Invalid character constant\\..*$gdb_prompt $"\ { pass "complete 'p \'a'"} -re ".*$gdb_prompt $" { fail "complete 'p \'a'"} timeout {fail "(timeout) complete 'p \'a'"} } } -re ".*$gdb_prompt $" { fail "complete 'p \'a'" } timeout { fail "(timeout) complete 'p \'a'" } }send_gdb "p 'a\t"sleep 1gdb_expect { -re "^p 'a\\\x07$" { send_gdb "\t" gdb_expect { -re ".*argv.*$gdb_prompt p .a$" { send_gdb "\n" gdb_expect { -re "Invalid character constant\\..*$gdb_prompt $" { pass "complete (2) 'p \'a'" } -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" } timeout { fail "(timeout) complete (2) 'p \'a'" } } } -re "(There are $decimal possibilities\\. Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" { send_gdb "n" gdb_expect { -re "\\(gdb\\) p 'a$" { send_gdb "\n" gdb_expect { -re "Invalid character constant\\..*$gdb_prompt $" { pass "complete (2) 'p \'a'" } -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" } timeout { fail "(timeout) complete (2) 'p \'a'" } } } -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" } timeout { fail "(timeout) complete (2) 'p \'a'" } } } -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" } timeout { fail "(timeout) complete (2) 'p \'a'" } } } -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" } timeout { fail "(timeout) complete (2) 'p \'a'" }}# These tests used to try completing the shorter "p b-a".# Unfortunately, on some systems, there are .o files in system# libraries which declare static variables named `b'. Of course,# those variables aren't really in scope, as far as the compiler is# concerned. But GDB deliberately tries to be more liberal: if you# enter an identifier that doesn't have any binding in scope, GDB will# search all the program's compilation units for a static variable of# the given name.## This behavior can help avoid a lot of pedantry, so it's usually a# good thing. But in this test case, it causes GDB to print the value# of some random variable, instead of giving us the "No symbol..."# error we were expecting.## For example, on S/390 linux, the file s_atan.c in libm.a declares a# `b', which is a structure containing an int and a float, so GDB says# ``Argument to arithmetic operation not a number or boolean'' instead# of ``No symbol ...''.## So, I'm hoping that there is no system with a static library variable named# `no_var_by_this_name'.send_gdb "p no_var_named_this-a\t"sleep 1gdb_expect { -re "^p no_var_named_this-a\\\x07$" { send_gdb "\n" gdb_expect { -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" { pass "complete 'p no_var_named_this-a'" } -re ".*$gdb_prompt $" { fail "complete 'p no_var_named_this-a'" } timeout { fail "(timeout) complete 'p no_var_named_this-a'" } } } -re ".*$gdb_prompt $" { fail "complete 'p no_var_named_this-a'" } timeout { fail "(timeout) complete 'p no_var_named_this-a'" }}send_gdb "p no_var_named_this-a\t"sleep 1gdb_expect { -re "^p no_var_named_this-a\\\x07$" { send_gdb "\t" gdb_expect { -re ".*argv.*$gdb_prompt p no_var_named_this-a$" { send_gdb "\n" gdb_expect { -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" { pass "complete (2) 'p no_var_named_this-a'" } -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-a'" } timeout { fail "(timeout) complete (2) 'p no_var_named_this-a'" } } } -re "(There are $decimal possibilities\\. Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" { send_gdb "n" gdb_expect { -re "\\(gdb\\) p no_var_named_this-a$" { send_gdb "\n" gdb_expect { -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" { pass "complete (2) 'p no_var_named_this-a'" } -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-a'" } timeout { fail "(timeout) complete (2) 'p no_var_named_this-a'" } } } -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-a'" } timeout { fail "(timeout) complete (2) 'p no_var_named_this-a'" } } } -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-a'" } timeout { fail "(timeout) complete (2) 'p no_var_named_this-a'" } } } -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-a'" } timeout { fail "(timeout) complete (2) 'p no_var_named_this-a'" }}send_gdb "p no_var_named_this-\t"sleep 1gdb_expect { -re "^p no_var_named_this-\\\x07$" { send_gdb "\t" gdb_expect { -re "(There are $decimal possibilities\\. Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" { send_gdb "n" gdb_expect { -re "\\(gdb\\) p no_var_named_this-$" { send_gdb "\n" gdb_expect { -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" { pass "complete (2) 'p no_var_named_this-'" } -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-'" } timeout { fail "(timeout) complete (2) 'p no_var_named_this-'" } } } -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-'" } timeout { fail "(timeout) complete (2) 'p no_var_named_this-'" } } } -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-'" } timeout { fail "(timeout) complete (2) 'p no_var_named_this-'" } } } -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-'" } timeout { fail "(timeout) complete (2) 'p no_var_named_this-'" }}# The following tests used to simply try to complete `${objdir}/Make',# and so on. The problem is that ${objdir} can be very long; the# completed filename may be more than eighty characters wide. When# this happens, readline tries to manage things, producing output that# may make sense on the screen, but is rather hard for our script to# recognize.## In the case that motivated this change, the (gdb) prompt occupied# the leftmost six columns, and `${objdump}/' was seventy-four# characters long --- eighty in all. After printing the slash,# readline emitted a space, a carriage return, and then `Makefile'# (the tab character being received as input after `Make'.## Basically, you have to let readline do whatever it's going to do to# make the screen look right. If it happens to use a different# strategy on Tuesdays to get the cursor in the right place, that's# not something the testsuite should care about.## So, we avoid long lines. We `cd' to ${objdir} first, and then do# the completion relative to the current directory.gdb_test "cd ${objdir}" "Working directory ${objdir}.*" "cd to \${objdir}"send_gdb "file ./Make\t"sleep 1gdb_expect { -re "file ./Makefile.*$"\ { send_gdb "\n" gdb_expect { -re "\r\nA program is being debugged already\\. Kill it\\? \\(y or n\\) $"\ { send_gdb "n\n" gdb_expect { -re "\r\nProgram not killed\\.\r\n$gdb_prompt $"\ { pass "complete 'file ./Make'"} -re ".*$gdb_prompt $" { fail "complete 'file ./Make'"} timeout {fail "(timeout) complete 'file ./Make'"} } } -re ".*$gdb_prompt $" { fail "complete 'file ./Make'"} timeout {fail "(timeout) complete 'file ./Make'"} } } -re ".*$gdb_prompt $" { fail "complete 'file ./Make'" } timeout { fail "(timeout) complete 'file ./Make'" } }# ${srcdir} may be a relative path. We want to make sure we end up# in the right directory - so make sure we know where it is.set mydir [pwd]cd ${srcdir}set fullsrcdir [pwd]cd ${mydir}gdb_test "cd ${fullsrcdir}" "Working directory ${fullsrcdir}.*" "cd to \${srcdir}"send_gdb "file ./gdb.base/compl\t"sleep 1gdb_expect { -re "^file ./gdb.base/completion\\.exp $"\ { send_gdb "\n" gdb_expect { -re "\r\nA program is being debugged already\\. Kill it\\? \\(y or n\\) $"\ { send_gdb "n\n" gdb_expect { -re "\r\nProgram not killed\\.\r\n$gdb_prompt $"\ { pass "complete 'file ./gdb.base/compl'"} -re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/compl'"} timeout {fail "(timeout) complete 'file ./gdb.base/compl'"} } } -re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/compl'"} timeout {fail "(timeout) complete 'file ./gdb.base/compl'"} } } -re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/compl'" } timeout { fail "(timeout) complete 'file ./gdb.base/compl'" } }send_gdb "info func mark\t"sleep 1gdb_expect { -re "^info func mark.*er$"\ { send_gdb "\t\t" sleep 3 gdb_expect { -re "marker1.*$gdb_prompt info func marker$"\ { send_gdb "\n" gdb_expect { -re "All functions matching regular expression \"marker\":.*File.*break.c:\r\nint marker1\\(\\);\r\nint marker2\\(int\\).*marker3\\(char.*char.*\\).*marker4\\(long int\\);.*$gdb_prompt $"\ { pass "complete 'info func mar'"} -re ".*$gdb_prompt $" { fail "complete 'info func mar'"} timeout {fail "(timeout) complete 'info func mar'"} } } -re ".*$gdb_prompt $" { fail "complete 'info func mar'"} timeout {fail "(timeout) complete 'info func mar'"} } } -re ".*$gdb_prompt $" { fail "complete 'info func mar'" } timeout { fail "(timeout) complete 'info func mar'" } }send_gdb "set follow-fork-mode \t\t"sleep 1gdb_expect { -re "ask.*child.*parent.*$gdb_prompt set follow-fork-mode $"\ { send_gdb "\n" gdb_expect { -re "Requires an argument.*ask.*child.*parent.*$gdb_prompt $"\ { pass "complete 'set follow-fork-mode'"} -re "Ambiguous item \"\"\\..*$gdb_prompt $"\ { pass "complete 'set follow-fork-mode'"} -re ".*$gdb_prompt $" { fail "complete 'set follow-fork-mode'"} timeout {fail "(timeout) complete 'set follow-fork-mode'"} } } -re ".*$gdb_prompt $" { fail "complete 'set follow-fork-mode'" } timeout { fail "(timeout) complete 'set follow-fork-mode'" } }# Restore globals modified in this test...if [info exists old_inputrc] { set env(INPUTRC) $old_inputrc} else { unset env(INPUTRC)}set timeout $oldtimeout1return 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -