📄 collection.exp
字号:
# Copyright (C) 1998 Free Software Foundation, Inc.# This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.# # This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.# # You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Please email any bugs, comments, and/or additions to this file to:# bug-gdb@prep.ai.mit.eduif [istarget "m68k-*-elf"] then { pass "Test not supported on this target" return;}load_lib "trace-support.exp"if $tracelevel then { strace $tracelevel}set prms_id 0set bug_id 0set testfile "collection"set srcfile ${testfile}.cset binfile $objdir/$subdir/$testfileif { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \ executable {debug additional_flags=-w}] != "" } { gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."}# Tests: # 1) $args# 2) function args by name# 3) $locs# 4) function locals by name# 5) $regs# 6) registers by name ($sp, $fp?)# 7) globals by name# 8) expressions (lots of different kinds: local and global)set ws "\[\r\n\t \]+"set cr "\[\r\n\]+"## Utility procs#proc test_register { reg test_id } { global cr global gdb_prompt send_gdb "print $reg\n" gdb_expect { -re "\\$\[0-9\]+ = \[x0\]+$cr$gdb_prompt " { fail "collect $test_id: collected $reg (zero)" } -re "\\$\[0-9\]+ = \[x0-9a-fA-F\]+$cr$gdb_prompt " { pass "collect $test_id: collected $reg" } -re "\[Ee\]rror.*$gdb_prompt " { fail "collect $test_id: collected $reg (error)" } timeout { fail "collect $test_id: collected $reg (timeout)" } }}proc run_trace_experiment { msg test_func } { gdb_run_cmd gdb_test "tstart" \ "\[\r\n\]+" \ "collect $msg: start trace experiment" gdb_test "continue" \ "Continuing.*Breakpoint \[0-9\]+, end.*" \ "collect $msg: run trace experiment" gdb_test "tstop" \ "\[\r\n\]+" \ "collect $msg: stop trace experiment" gdb_test "tfind start" \ "#0 $test_func .*" \ "collect $msg: tfind test frame"}## Test procs#proc gdb_collect_args_test { myargs msg } { global cr global gdb_prompt # Make sure we're in a sane starting state. gdb_test "tstop" "" "" gdb_test "tfind none" "" "" gdb_delete_tracepoints gdb_test "trace args_test_func" \ "Tracepoint \[0-9\]+ at .*" \ "collect $msg: set tracepoint" gdb_trace_setactions "collect $msg: define actions" \ "" \ "collect $myargs" "^$" # Begin the test. run_trace_experiment $msg args_test_func gdb_test "print argc" \ "\\$\[0-9\]+ = 1 '.001'$cr" \ "collect $msg: collected arg char" gdb_test "print argi" \ "\\$\[0-9\]+ = 2$cr" \ "collect $msg: collected arg int" gdb_test "print argf" \ "\\$\[0-9\]+ = 3.\[23\]\[0-9\]*$cr" \ "collect $msg: collected arg float" gdb_test "print argd" \ "\\$\[0-9\]+ = 4.\[34\]\[0-9\]*$cr" \ "collect $msg: collected arg double" # struct arg as one of several args (near end of list) gdb_test "print argstruct.memberc" \ "\\$\[0-9\]+ = 101 'e'$cr" \ "collect $msg: collected arg struct member char" gdb_test "print argstruct.memberi" \ "\\$\[0-9\]+ = 102$cr" \ "collect $msg: collected arg struct member int" gdb_test "print argstruct.memberf" \ "\\$\[0-9\]+ = 103.\[23\]\[0-9\]*$cr" \ "collect $msg: collected arg struct member float" gdb_test "print argstruct.memberd" \ "\\$\[0-9\]+ = 104.\[34\]\[0-9\]*$cr" \ "collect $msg: collected arg struct member double" # array arg as one of several args (near end of list) gdb_test "print argarray\[0\]" \ "\\$\[0-9\]+ = 111$cr" \ "collect $msg: collected argarray #0" gdb_test "print argarray\[1\]" \ "\\$\[0-9\]+ = 112$cr" \ "collect $msg: collected argarray #1" gdb_test "print argarray\[2\]" \ "\\$\[0-9\]+ = 113$cr" \ "collect $msg: collected argarray #2" gdb_test "print argarray\[3\]" \ "\\$\[0-9\]+ = 114$cr" \ "collect $msg: collected argarray #3" gdb_test "tfind none" \ "#0 end .*" \ "collect $msg: cease trace debugging"}proc gdb_collect_argstruct_test { myargs msg } { global cr global gdb_prompt # Make sure we're in a sane starting state. gdb_test "tstop" "" "" gdb_test "tfind none" "" "" gdb_delete_tracepoints gdb_test "trace argstruct_test_func" \ "Tracepoint \[0-9\]+ at .*" \ "collect $msg: set tracepoint" gdb_trace_setactions "collect $msg: define actions" \ "" \ "collect $myargs" "^$" # Begin the test. run_trace_experiment $msg argstruct_test_func # struct argument as only argument gdb_test "print argstruct.memberc" \ "\\$\[0-9\]+ = 101 'e'$cr" \ "collect $msg: collected arg struct member char" gdb_test "print argstruct.memberi" \ "\\$\[0-9\]+ = 102$cr" \ "collect $msg: collected arg struct member int" gdb_test "print argstruct.memberf" \ "\\$\[0-9\]+ = 103.\[23\]\[0-9\]*$cr" \ "collect $msg: collected arg struct member float" gdb_test "print argstruct.memberd" \ "\\$\[0-9\]+ = 104.\[34\]\[0-9\]*$cr" \ "collect $msg: collected arg struct member double" gdb_test "tfind none" \ "#0 end .*" \ "collect $msg: cease trace debugging"}proc gdb_collect_argarray_test { myargs msg } { global cr global gdb_prompt # Make sure we're in a sane starting state. gdb_test "tstop" "" "" gdb_test "tfind none" "" "" gdb_delete_tracepoints gdb_test "trace argarray_test_func" \ "Tracepoint \[0-9\]+ at .*" \ "collect $msg: set tracepoint" gdb_trace_setactions "collect $msg: define actions" \ "" \ "collect $myargs" "^$" # Begin the test. run_trace_experiment $msg argarray_test_func # array arg as only argument gdb_test "print argarray\[0\]" \ "\\$\[0-9\]+ = 111$cr" \ "collect $msg: collected argarray #0" gdb_test "print argarray\[1\]" \ "\\$\[0-9\]+ = 112$cr" \ "collect $msg: collected argarray #1" gdb_test "print argarray\[2\]" \ "\\$\[0-9\]+ = 113$cr" \ "collect $msg: collected argarray #2" gdb_test "print argarray\[3\]" \ "\\$\[0-9\]+ = 114$cr" \ "collect $msg: collected argarray #3" gdb_test "tfind none" \ "#0 end .*" \ "collect $msg: cease trace debugging"}proc gdb_collect_locals_test { func mylocs msg } { global cr global gdb_prompt # Make sure we're in a sane starting state. gdb_test "tstop" "" "" gdb_test "tfind none" "" "" gdb_delete_tracepoints # Find the comment-identified line for setting this tracepoint. set testline 0 send_gdb "list $func, +30\n" gdb_expect { -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" { set testline $expect_out(1,string) pass "collect $msg: find tracepoint line" } -re ".*$gdb_prompt " { fail "collect $msg: find tracepoint line (skipping locals test)" return } timeout { fail "collect $msg: find tracepoint line (skipping locals test)" return } } gdb_test "trace $testline" \ "Tracepoint \[0-9\]+ at .*" \ "collect $msg: set tracepoint" gdb_trace_setactions "collect $msg: define actions" \ "" \ "collect $mylocs" "^$" # Begin the test. run_trace_experiment $msg $func gdb_test "print locc" \ "\\$\[0-9\]+ = 11 '.013'$cr" \ "collect $msg: collected local char" gdb_test "print loci" \ "\\$\[0-9\]+ = 12$cr" \ "collect $msg: collected local int" gdb_test "print locf" \ "\\$\[0-9\]+ = 13.\[23\]\[0-9\]*$cr" \ "collect $msg: collected local float" gdb_test "print locd" \ "\\$\[0-9\]+ = 14.\[34\]\[0-9\]*$cr" \ "collect $msg: collected local double" gdb_test "print locst.memberc" \ "\\$\[0-9\]+ = 15 '.017'$cr" \ "collect $msg: collected local member char" gdb_test "print locst.memberi" \ "\\$\[0-9\]+ = 16$cr" \ "collect $msg: collected local member int" gdb_test "print locst.memberf" \ "\\$\[0-9\]+ = 17.\[67\]\[0-9\]*$cr" \ "collect $msg: collected local member float" gdb_test "print locst.memberd" \ "\\$\[0-9\]+ = 18.\[78\]\[0-9\]*$cr" \ "collect $msg: collected local member double" gdb_test "print locar\[0\]" \ "\\$\[0-9\]+ = 121$cr" \ "collect $msg: collected locarray #0" gdb_test "print locar\[1\]" \ "\\$\[0-9\]+ = 122$cr" \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -