1# Copyright 2003-2020 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. */ 15 16# advance.exp -- Expect script to test 'advance' in gdb 17 18standard_testfile 19 20if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} { 21 return -1 22} 23 24if ![runto_main] then { 25 fail "can't run to main" 26 return 0 27} 28 29# Verify that "advance <location>" works. (This is really just syntactic 30# sugar for "tbreak <location>; continue".) 31# 32gdb_test "advance [gdb_get_line_number "advance this location"]" \ 33 "main .* at .*:.*b = 3.*advance this location.*" \ 34 "advance line number" 35 36# Verify that a malformed "advance" is gracefully caught. 37# 38gdb_test "advance [gdb_get_line_number "advance malformed"] then stop" \ 39 "malformed linespec error: unexpected string, \"then stop\"" \ 40 "malformed advance" 41 42# Verify that "advance <funcname>" works. 43# 44gdb_test "advance func" \ 45 "func.*at.*x = x \\+ 5." 46 47# Verify that "advance <funcname>" when funcname is NOT called by the current 48# frame, stops at the end of the current frame. 49# 50# gdb can legitimately stop on either the current line or the next line, 51# depending on whether the machine instruction for 'call' on the current 52# line has more instructions after it or not. 53# 54gdb_test "advance func3" \ 55 "(in main|).*(func \\(c\\)|marker1 \\(\\)).*stop here after leaving current frame..."\ 56 "advance function not called by current frame" 57 58# break at main again 59# 60gdb_test "break [gdb_get_line_number "break here"]" \ 61 ".*Breakpoint.* at .*" \ 62 "set breakpoint at call to func3" 63gdb_test "continue" \ 64 ".*Breakpoint ${decimal}, main.*func3.*break here.*" \ 65 "continue to call to func3 in main" 66 67# Verify that "advance <funcname>" when funcname is called as parameter to 68# another function works. 69# 70gdb_test "advance foo" \ 71 "foo \\(a=5\\).*int b = a \\+ 10;"\ 72 "advance function called as param" 73 74# Verify that we get an error if we use 'advance' w/o argument 75# 76gdb_test "advance" \ 77 "Argument required \\(a location\\)."\ 78 "advance with no argument" 79 80