1# Copyright (C) 2011-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# This file is part of the GDB testsuite. It tests python Finish 17# Breakpoints. 18 19class MyFinishBreakpoint (gdb.FinishBreakpoint): 20 def __init__(self, val, frame): 21 gdb.FinishBreakpoint.__init__ (self, frame) 22 print ("MyFinishBreakpoint init") 23 self.val = val 24 25 def stop(self): 26 print ("MyFinishBreakpoint stop with %d" % int (self.val.dereference ())) 27 print ("return_value is: %d" % int (self.return_value)) 28 gdb.execute ("where 1") 29 return True 30 31 def out_of_scope(self): 32 print ("MyFinishBreakpoint out of scope") 33 34class TestBreakpoint(gdb.Breakpoint): 35 def __init__(self): 36 gdb.Breakpoint.__init__ (self, spec="test_1", internal=1) 37 self.silent = True 38 self.count = 0 39 print ("TestBreakpoint init") 40 41 def stop(self): 42 self.count += 1 43 try: 44 TestFinishBreakpoint (gdb.newest_frame (), self.count) 45 except ValueError as e: 46 print (e) 47 return False 48 49class TestFinishBreakpoint (gdb.FinishBreakpoint): 50 def __init__ (self, frame, count): 51 self.count = count 52 gdb.FinishBreakpoint.__init__ (self, frame, internal=1) 53 54 55 def stop(self): 56 print ("-->", self.number) 57 if (self.count == 3): 58 print ("test stop: %d" % self.count) 59 return True 60 else: 61 print ("test don't stop: %d" % self.count) 62 return False 63 64 65 def out_of_scope(self): 66 print ("test didn't finish: %d" % self.count) 67 68class TestExplicitBreakpoint(gdb.Breakpoint): 69 def stop(self): 70 try: 71 SimpleFinishBreakpoint (gdb.newest_frame ()) 72 except ValueError as e: 73 print (e) 74 return False 75 76class SimpleFinishBreakpoint(gdb.FinishBreakpoint): 77 def __init__(self, frame): 78 gdb.FinishBreakpoint.__init__ (self, frame) 79 80 print ("SimpleFinishBreakpoint init") 81 82 def stop(self): 83 print ("SimpleFinishBreakpoint stop" ) 84 return True 85 86 def out_of_scope(self): 87 print ("SimpleFinishBreakpoint out of scope") 88 89print ("Python script imported") 90