1# Copyright 2003-2019 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 "advance func" 47 48# Verify that "advance <funcname>" when funcname is NOT called by the current 49# frame, stops at the end of the current frame. 50# 51# gdb can legitimately stop on either the current line or the next line, 52# depending on whether the machine instruction for 'call' on the current 53# line has more instructions after it or not. 54# 55gdb_test "advance func3" \ 56 "(in main|).*(func \\(c\\)|marker1 \\(\\)).*stop here after leaving current frame..."\ 57 "advance function not called by current frame" 58 59# break at main again 60# 61gdb_test "break [gdb_get_line_number "break here"]" \ 62 ".*Breakpoint.* at .*" \ 63 "set breakpoint at call to func3" 64gdb_test "continue" \ 65 ".*Breakpoint ${decimal}, main.*func3.*break here.*" \ 66 "continue to call to func3 in main" 67 68# Verify that "advance <funcname>" when funcname is called as parameter to 69# another function works. 70# 71gdb_test "advance foo" \ 72 "foo \\(a=5\\).*int b = a \\+ 10;"\ 73 "advance function called as param" 74 75# Verify that we get an error if we use 'advance' w/o argument 76# 77gdb_test "advance" \ 78 "Argument required \\(a location\\)."\ 79 "advance with no argument" 80 81