1# Copyright 2003-2015 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 $testfile.exp $testfile $srcfile debug]} { 21 untested $testfile.exp 22 return -1 23} 24 25if ![runto_main] then { 26 fail "Can't run to main" 27 return 0 28} 29 30# Verify that "advance <location>" works. (This is really just syntactic 31# sugar for "tbreak <location>; continue".) 32# 33gdb_test "advance [gdb_get_line_number "advance this location"]" \ 34 "main .* at .*:.*b = 3.*advance this location.*" \ 35 "advance line number" 36 37# Verify that a malformed "advance" is gracefully caught. 38# 39gdb_test "advance [gdb_get_line_number "advance malformed"] then stop" \ 40 "malformed linespec error: unexpected string, \"then stop\"" \ 41 "malformed advance" 42 43# Verify that "advance <funcname>" works. 44# 45gdb_test "advance func" \ 46 "func.*at.*x = x \\+ 5." \ 47 "advance func" 48 49# Verify that "advance <funcname>" when funcname is NOT called by the current 50# frame, stops at the end of the current frame. 51# 52# gdb can legitimately stop on either the current line or the next line, 53# depending on whether the machine instruction for 'call' on the current 54# line has more instructions after it or not. 55# 56gdb_test "advance func3" \ 57 "(in main|).*(func \\(c\\)|marker1 \\(\\)).*stop here after leaving current frame..."\ 58 "advance function not called by current frame" 59 60# break at main again 61# 62gdb_test "break [gdb_get_line_number "break here"]" \ 63 ".*Breakpoint.* at .*" \ 64 "set breakpoint at call to func3" 65gdb_test "continue" \ 66 ".*Breakpoint ${decimal}, main.*func3.*break here.*" \ 67 "continue to call to func3 in main" 68 69# Verify that "advance <funcname>" when funcname is called as parameter to 70# another function works. 71# 72gdb_test "advance foo" \ 73 "foo \\(a=5\\).*int b = a \\+ 10;"\ 74 "advance function called as param" 75 76# Verify that we get an error if we use 'advance' w/o argument 77# 78gdb_test "advance" \ 79 "Argument required \\(a location\\)."\ 80 "advance with no argument" 81 82