1# Copyright (C) 2010-2017 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 pretty 17# printers. 18import gdb 19 20def signal_stop_handler (event): 21 if (isinstance (event, gdb.StopEvent)): 22 print ("event type: stop") 23 if (isinstance (event, gdb.SignalEvent)): 24 print ("stop reason: signal") 25 print ("stop signal: %s" % (event.stop_signal)) 26 if ( event.inferior_thread is not None) : 27 print ("thread num: %s" % (event.inferior_thread.num)) 28 29def breakpoint_stop_handler (event): 30 if (isinstance (event, gdb.StopEvent)): 31 print ("event type: stop") 32 if (isinstance (event, gdb.BreakpointEvent)): 33 print ("stop reason: breakpoint") 34 print ("first breakpoint number: %s" % (event.breakpoint.number)) 35 for bp in event.breakpoints: 36 print ("breakpoint number: %s" % (bp.number)) 37 if ( event.inferior_thread is not None) : 38 print ("thread num: %s" % (event.inferior_thread.num)) 39 else: 40 print ("all threads stopped") 41 42def exit_handler (event): 43 assert (isinstance (event, gdb.ExitedEvent)) 44 print ("event type: exit") 45 print ("exit code: %d" % (event.exit_code)) 46 print ("exit inf: %d" % (event.inferior.num)) 47 print ("dir ok: %s" % str('exit_code' in dir(event))) 48 49def continue_handler (event): 50 assert (isinstance (event, gdb.ContinueEvent)) 51 print ("event type: continue") 52 if ( event.inferior_thread is not None) : 53 print ("thread num: %s" % (event.inferior_thread.num)) 54 55def new_objfile_handler (event): 56 assert (isinstance (event, gdb.NewObjFileEvent)) 57 print ("event type: new_objfile") 58 print ("new objfile name: %s" % (event.new_objfile.filename)) 59 60def clear_objfiles_handler (event): 61 assert (isinstance (event, gdb.ClearObjFilesEvent)) 62 print ("event type: clear_objfiles") 63 print ("progspace: %s" % (event.progspace.filename)) 64 65def inferior_call_handler (event): 66 if (isinstance (event, gdb.InferiorCallPreEvent)): 67 print ("event type: pre-call") 68 elif (isinstance (event, gdb.InferiorCallPostEvent)): 69 print ("event type: post-call") 70 else: 71 assert False 72 print ("ptid: %s" % (event.ptid,)) 73 print ("address: 0x%x" % (event.address)) 74 75def register_changed_handler (event): 76 assert (isinstance (event, gdb.RegisterChangedEvent)) 77 print ("event type: register-changed") 78 assert (isinstance (event.frame, gdb.Frame)) 79 print ("frame: %s" % (event.frame)) 80 print ("num: %s" % (event.regnum)) 81 82def memory_changed_handler (event): 83 assert (isinstance (event, gdb.MemoryChangedEvent)) 84 print ("event type: memory-changed") 85 print ("address: %s" % (event.address)) 86 print ("length: %s" % (event.length)) 87 88 89class test_events (gdb.Command): 90 """Test events.""" 91 92 def __init__ (self): 93 gdb.Command.__init__ (self, "test-events", gdb.COMMAND_STACK) 94 95 def invoke (self, arg, from_tty): 96 gdb.events.stop.connect (signal_stop_handler) 97 gdb.events.stop.connect (breakpoint_stop_handler) 98 gdb.events.exited.connect (exit_handler) 99 gdb.events.cont.connect (continue_handler) 100 gdb.events.inferior_call.connect (inferior_call_handler) 101 gdb.events.memory_changed.connect (memory_changed_handler) 102 gdb.events.register_changed.connect (register_changed_handler) 103 print ("Event testers registered.") 104 105test_events () 106 107class test_newobj_events (gdb.Command): 108 """NewObj events.""" 109 110 def __init__ (self): 111 gdb.Command.__init__ (self, "test-objfile-events", gdb.COMMAND_STACK) 112 113 def invoke (self, arg, from_tty): 114 gdb.events.new_objfile.connect (new_objfile_handler) 115 gdb.events.clear_objfiles.connect (clear_objfiles_handler) 116 print ("Object file events registered.") 117 118test_newobj_events () 119