1# Copyright (C) 2015-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 16import gdb 17 18 19def safe_execute(command): 20 """Execute command, ignoring any gdb errors.""" 21 result = None 22 try: 23 result = gdb.execute(command, to_string=True) 24 except gdb.error: 25 pass 26 return result 27 28 29def convert_spaces(file_name): 30 """Return file_name with all spaces replaced with "-".""" 31 return file_name.replace(" ", "-") 32 33 34def select_file(file_name): 35 """Select a file for debugging. 36 37 N.B. This turns confirmation off. 38 """ 39 safe_execute("set confirm off") 40 safe_execute("kill") 41 print("Selecting file %s" % (file_name)) 42 if file_name is None: 43 gdb.execute("file") 44 else: 45 gdb.execute("file %s" % (file_name)) 46 47 48def runto(location): 49 """Run the program to location. 50 51 N.B. This turns confirmation off. 52 """ 53 safe_execute("set confirm off") 54 gdb.execute("tbreak %s" % (location)) 55 gdb.execute("run") 56 57 58def runto_main(): 59 """Run the program to "main". 60 61 N.B. This turns confirmation off. 62 """ 63 runto("main") 64 65 66def run_n_times(count, func): 67 """Execute func count times.""" 68 while count > 0: 69 func() 70 count -= 1 71