1 # This testcase is part of GDB, the GNU debugger. 2 3 # Copyright 2018-2024 Free Software Foundation, Inc. 4 5 # This program is free software; you can redistribute it and/or modify 6 # it under the terms of the GNU General Public License as published by 7 # the Free Software Foundation; either version 3 of the License, or 8 # (at your option) any later version. 9 # 10 # This program is distributed in the hope that it will be useful, 11 # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 # GNU General Public License for more details. 14 # 15 # You should have received a copy of the GNU General Public License 16 # along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 19 # This test verifies the TYPEREGEXP and NAMEREGEXP matching logic 20 # in the commands 21 # info [args|functions|locals|variables] [-q] [-t TYPEREGEXP] [NAMEREGEXP]. 22 23 24 standard_testfile 25 26 if { [prepare_for_testing "failed to prepare" ${testfile}] } { 27 return -1 28 } 29 30 if {![runto setup_done]} { 31 return 0 32 } 33 34 set any "\[^\r\n\]*" 35 set ws "\[ \t\]\+" 36 set number "\[0-9]\+" 37 38 39 ############# Test 'info functions'. 40 41 with_test_prefix "info functions nameregexp" { 42 foreach cmd { 43 "info functions info_fun" 44 "info functions -- info_fun" 45 "info functions ^info_fun" } { 46 gdb_test $cmd \ 47 [multi_line \ 48 "All functions matching regular expression \".*info_fun.*\":" \ 49 "" \ 50 "File .*info_qt.c:" \ 51 "${number}: void info_fun1\\\(void\\\);" \ 52 "${number}: int info_fun2\\\(char\\\);" \ 53 "${number}: int info_fun2bis\\\(char\\\);" \ 54 "${number}: entier info_fun2xxx\\\(char, int, int\\\);" \ 55 "${number}: entier info_fun2yyy\\\(char, int, int\\\);" \ 56 ] 57 } 58 } 59 60 with_test_prefix "info functions nameregexp quiet" { 61 foreach cmd { 62 "info functions -q info_fun" 63 "info functions -q -- info_fun" } { 64 gdb_test $cmd \ 65 [multi_line \ 66 "" \ 67 "File .*info_qt.c:" \ 68 "${number}: void info_fun1\\\(void\\\);" \ 69 "${number}: int info_fun2\\\(char\\\);" \ 70 "${number}: int info_fun2bis\\\(char\\\);" \ 71 "${number}: entier info_fun2xxx\\\(char, int, int\\\);" \ 72 "${number}: entier info_fun2yyy\\\(char, int, int\\\);" \ 73 ] 74 } 75 } 76 77 with_test_prefix "info functions nameregexp quiet no match" { 78 foreach cmd { 79 "info functions -q nowaythiscanmatch" 80 "info functions -q -- -q" } { 81 gdb_test_no_output $cmd 82 } 83 } 84 85 with_test_prefix "info functions typeregexp nameregexp" { 86 foreach cmd { 87 "info functions -t entier -q info_fun" 88 "info functions -q -t 'entier (' -- info_fun" 89 "info functions -q -t '(char, int, int)' -- info_fun" 90 "info functions -q -t 'entier (char, int, int)' -- info_fun" } { 91 gdb_test $cmd \ 92 [multi_line \ 93 "" \ 94 "File .*info_qt.c:" \ 95 "${number}: entier info_fun2xxx\\\(char, int, int\\\);" \ 96 "${number}: entier info_fun2yyy\\\(char, int, int\\\);" \ 97 ] 98 } 99 } 100 101 with_test_prefix "info functions typeregexp nameregexp no match" { 102 gdb_test_no_output "info functions -t ganze_Zahl -q info_fun" \ 103 "quiet output info functions no matching type" 104 } 105 106 ############# Test 'info variables'. 107 108 with_test_prefix "info variables nameregexp" { 109 foreach cmd { 110 "info variables info_qt" 111 "info variables -- info_qt" 112 "info variables ^info_qt" } { 113 gdb_test $cmd \ 114 [multi_line \ 115 "All variables matching regular expression \".*info_qt.*\":" \ 116 "" \ 117 "File .*info_qt.c:" \ 118 "${number}: entier info_qt_ent;" \ 119 "${number}: int info_qt_inc;" \ 120 ] 121 } 122 } 123 124 with_test_prefix "info variables nameregexp quiet no match" { 125 foreach cmd { 126 "info variables -q nowaythiscanmatch" 127 "info variables -q -- -q" } { 128 gdb_test_no_output $cmd 129 } 130 } 131 132 with_test_prefix "info variables typeregexp nameregexp quiet" { 133 foreach cmd { 134 "info variables -t entier -q info_qt" 135 "info variables -q -t entier -- info_qt" } { 136 gdb_test $cmd \ 137 [multi_line \ 138 "" \ 139 "File .*info_qt.c:" \ 140 "${number}: entier info_qt_ent;" \ 141 ] 142 } 143 } 144 145 with_test_prefix "info variables typeregexp nameregexp quiet no match" { 146 gdb_test_no_output "info variables -t ganze_Zahl -q info_at" \ 147 "quiet output info variables no matching type" 148 } 149 150 151 152 ############# Test 'info args' in function setup. 153 154 gdb_test "frame 1" ".* in setup .*" "set frame 1 for info args" 155 156 with_test_prefix "info args matching all args" { 157 foreach cmd { 158 "info args" 159 "info args arg_" 160 "info args g" 161 "info args -- .*" } { 162 gdb_test $cmd \ 163 [multi_line \ 164 "arg_c = 100 'd'" \ 165 "arg_i = 3" \ 166 "arg_j = 4" \ 167 ] 168 } 169 } 170 171 with_test_prefix "info args matching some args" { 172 foreach cmd { 173 "info args -t int" 174 "info args arg_[ij]"} { 175 gdb_test $cmd \ 176 [multi_line \ 177 "arg_i = 3" \ 178 "arg_j = 4" \ 179 ] 180 } 181 } 182 183 with_test_prefix "info args no match" { 184 gdb_test "info args nowaythiscanmatch" "No matching arguments." "no matching args" 185 gdb_test_no_output "info args -q nowaythiscanmatch" "quiet no matching args" 186 gdb_test_no_output "info args -q -t entier" "quiet no matching args with type" 187 } 188 189 ############# Test 'info locals' in function setup. 190 191 gdb_test "frame 1" ".* in setup .*" "set frame 1 for info locals" 192 193 with_test_prefix "info locals matching all locals" { 194 foreach cmd { 195 "info locals" 196 "info locals loc_arg_" 197 "info locals g" 198 "info locals -- .*" } { 199 gdb_test $cmd \ 200 [multi_line \ 201 "loc_arg_c = 100 'd'" \ 202 "loc_arg_i = 3" \ 203 "loc_arg_j = 4" \ 204 ] 205 } 206 } 207 208 with_test_prefix "info locals matching some locals" { 209 foreach cmd { 210 "info locals -t int" 211 "info locals arg_[ij]" 212 "info locals loc_arg_[ij]"} { 213 gdb_test $cmd \ 214 [multi_line \ 215 "loc_arg_i = 3" \ 216 "loc_arg_j = 4" \ 217 ] 218 } 219 } 220 221 with_test_prefix "info locals no match" { 222 gdb_test "info locals nowaythiscanmatch" "No matching locals." "no matching locals" 223 gdb_test_no_output "info locals -q nowaythiscanmatch" "quiet no matching locals" 224 gdb_test_no_output "info locals -q -t ganze_Zahl loc" "quiet no matching locals with type" 225 } 226 227 # Verify that the rest of the args is taken as a single regexp. 228 with_test_prefix "rest of args as single regexp" { 229 gdb_test "info functions abc def" \ 230 "All functions matching regular expression \\\"abc def\\\":" \ 231 "single regexp" 232 233 gdb_test "info functions -t uvw abc def" \ 234 "All functions matching regular expression \\\"abc def\\\" with type matching regular expression \\\"uvw\\\":" \ 235 "-t noquote single regexp" 236 237 gdb_test "info functions -t 'uvw xyz' abc def" \ 238 "All functions matching regular expression \\\"abc def\\\" with type matching regular expression \\\"uvw xyz\\\":" \ 239 "-t quote single regexp" 240 } 241