Imported Upstream version 7.9
[platform/upstream/gdb.git] / gdb / testsuite / gdb.python / py-events.py
1 # Copyright (C) 2010-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 # This file is part of the GDB testsuite.  It tests python pretty
17 # printers.
18 import gdb
19
20 def 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
29 def 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
42 def 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
49 def 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
55 def 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
60 def clear_objfiles_handler (event):
61     assert (isinstance (event, gdb.ClearObjFilesEvent))
62     print ("event type: clear_objfiles")
63     print ("progspace: %s" % (event.progspace.filename))
64
65 def 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
75 def 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
82 def 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
89 class 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
105 test_events ()
106
107 class 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
118 test_newobj_events ()