📄 completion.exp
字号:
-re ".*$gdb_prompt $" { fail "complete 'p \"break1'"} timeout {fail "(timeout) complete 'p \"break1'"} } } -re "^p \"break1\\.c\"$"\ { send_gdb "\n" gdb_expect { -re ".*$gdb_prompt $" { pass "complete 'p \"break1'"} timeout {fail "(timeout) complete 'p \"break1'"} } } -re "^p \"break1.*$" { send_gdb "\n" gdb_expect { -re ".*$gdb_prompt $" { fail "complete 'p \"break1'"} timeout {fail "(timeout) complete 'p \"break1'"} } } -re ".*$gdb_prompt $" { fail "complete 'p \"break1'" } timeout { fail "(timeout) complete 'p \"break1'" } }setup_xfail "*-*-*"send_gdb "p \"break1.\t"sleep 1gdb_expect { -re "^p \"break1\\.\\\x07$"\ { send_gdb "\n" gdb_expect { -re ".*$gdb_prompt $" { fail "complete 'p \"break1.'"} timeout {fail "(timeout) complete 'p \"break1.'"} } } -re "^p \"break1\\.c\"$"\ { send_gdb "\n" gdb_expect { -re ".*$gdb_prompt $" { pass "complete 'p \"break1.'"} timeout {fail "(timeout) complete 'p \"break1.'"} } } -re "^p \"break1\\..*$" { send_gdb "\n" gdb_expect { -re ".*$gdb_prompt $" { fail "complete 'p \"break1.'"} timeout {fail "(timeout) complete 'p \"break1.'"} } } -re ".*$gdb_prompt $" { fail "complete 'p \"break1.'" } timeout { fail "(timeout) complete 'p \"break1.'" } }send_gdb "p 'a\t"sleep 1gdb_expect { -re "^p 'a\\\x07$"\ { send_gdb "\n" gdb_expect { -re "(Invalid character constant\\.|Unmatched single quote\\.).*$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\\.|Unmatched single quote\\.).*$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\\.|Unmatched single quote\\.).*$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}/file',# 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 `${objdir}/' 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.# ${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}# If the directory name contains a '+' we must escape it, adding a backslash.# If not, the test below will fail because it will interpret the '+' as a # regexp operator. We use string_to_regexp for this purpose.gdb_test "cd ${fullsrcdir}" \ "Working directory [string_to_regexp ${fullsrcdir}].*" \ "cd to \${srcdir}"send_gdb "complete file ./gdb.base/compl\n"sleep 1gdb_expect { -re "file ./gdb.base/completion\\.exp.*$gdb_prompt $" { pass "complete-command 'file ./gdb.base/compl'"} -re ".*$gdb_prompt $" { fail "complete-command 'file ./gdb.base/compl'" } timeout { fail "(timeout) complete-command 'file ./gdb.base/compl'" }}send_gdb "file ./gdb.base/complet\t"sleep 1gdb_expect { -re "^file ./gdb.base/completion\\.exp $"\ { send_gdb "\n" # Ignore the exact error message. gdb_test_multiple "" "complete 'file ./gdb.base/complet'" { -re "\r\nA program is being debugged already\\.\[\r\n\]+Are you sure you want to change the file\\? \\(y or n\\) $" { send_gdb "n\n" exp_continue } -re ".*$gdb_prompt $" { pass "complete 'file ./gdb.base/complet'" } } } -re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/complet'" } timeout { fail "(timeout) complete 'file ./gdb.base/complet'" } }send_gdb "info func marke\t"sleep 1gdb_expect { -re "^info func marke.*r$"\ { 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.*break1.c:\r\nint marker1\\((void|)\\);\r\nint marker2\\(int\\).*marker3\\(char.*char.*\\).*marker4\\(long int\\);.*$gdb_prompt $"\ { pass "complete 'info func marke'"} -re ".*$gdb_prompt $" { fail "complete 'info func marke'"} timeout {fail "(timeout) complete 'info func marke'"} } } -re ".*$gdb_prompt $" { fail "complete 'info func marke'"} timeout {fail "(timeout) complete 'info func marke'"} } } -re ".*$gdb_prompt $" { fail "complete 'info func marke'" } timeout { fail "(timeout) complete 'info func marke'" } }send_gdb "set follow-fork-mode \t\t"sleep 1gdb_expect { -re "child.*parent.*$gdb_prompt set follow-fork-mode $"\ { send_gdb "\n" gdb_expect { -re "Requires an argument.*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 + -