py-frame-inline.exp revision 1.10
1# Copyright (C) 2011-2023 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 16load_lib gdb-python.exp 17 18standard_testfile 19 20if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } { 21 return -1 22} 23 24# Skip all tests if Python scripting is not enabled. 25if { [skip_python_tests] } { continue } 26 27if {![runto_main]} { 28 return 0 29} 30 31gdb_breakpoint [gdb_get_line_number "break-here"] 32gdb_continue_to_breakpoint "Block break here." 33 34gdb_test "info frame" "inlined into frame 1\r\n.*" 35 36gdb_test "up" "#1 g .*" 37 38gdb_test "python print (gdb.selected_frame().read_var('l'))" "\r\n42" 39 40# A regression test for having a backtrace limit that forces unwinding 41# to stop after an inline frame. GDB needs to compute the frame_id of 42# the inline frame, which requires unwinding past all the inline 43# frames to the real stack frame, even if that means bypassing the 44# user visible backtrace limit. See PR backtrace/15558. 45# 46# Set the limit, and run to an inline function. It's important that 47# the frame cache is flushed somehow after setting the limit, to force 48# frame id recomputation. 49gdb_test_no_output "set backtrace limit 1" 50gdb_continue_to_breakpoint "Block break here again." 51 52gdb_test "python print (gdb.newest_frame())" ".*" 53 54# Regression test to verify that Frame.function works properly for 55# inline frames. 56gdb_test "python print (gdb.newest_frame().function())" "f(\\(\\))?" 57