annotate Mac/Tools/IDE/PyDebugger.py @ 25838:8540887bcec6 2.2

Backport of 2.183: Fix memory leak in add_subclass() found by NealN with valgrind.
author Guido van Rossum <guido@python.org>
date Fri, 18 Oct 2002 13:42:21 +0000
parents 239269c96514
children 2b1701cd4566
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1 import sys
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
2 import bdb
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
3 import types
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
4 import os
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
5
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
6 import W
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
7 import WASTEconst
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
8 import PyBrowser
19488
42b2f1936254 Import the MacOS toolbox modules from the Carbon package.
Jack Jansen <jack.jansen@cwi.nl>
parents: 18176
diff changeset
9 from Carbon import Qd
42b2f1936254 Import the MacOS toolbox modules from the Carbon package.
Jack Jansen <jack.jansen@cwi.nl>
parents: 18176
diff changeset
10 from Carbon import Evt
42b2f1936254 Import the MacOS toolbox modules from the Carbon package.
Jack Jansen <jack.jansen@cwi.nl>
parents: 18176
diff changeset
11 from Carbon import Lists
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
12 import MacOS
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
13 _filenames = {}
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
14
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
15 SIMPLE_TYPES = (
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
16 types.NoneType,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
17 types.IntType,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
18 types.LongType,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
19 types.FloatType,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
20 types.ComplexType,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
21 types.StringType
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
22 )
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
23
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
24
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
25 class Debugger(bdb.Bdb):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
26
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
27 def __init__(self, title = 'Debugger'):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
28 bdb.Bdb.__init__(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
29 self.closed = 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
30 self.title = title
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
31 self.breaksviewer = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
32 self.reset()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
33 self.tracing = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
34 self.tracingmonitortime = Evt.TickCount()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
35 self.editors = {}
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
36
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
37 prefs = W.getapplication().getprefs()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
38 if prefs.debugger:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
39 for file, breaks in prefs.debugger.breaks.items():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
40 for b in breaks:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
41 self.set_break(file, b)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
42 self.bounds, self.horpanes, self.verpanes = prefs.debugger.windowsettings
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
43 self.tracemagic = prefs.debugger.tracemagic
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
44 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
45 self.breaks = {}
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
46 self.horpanes = (0.4, 0.6)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
47 self.verpanes = (0.3, 0.35, 0.35)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
48 self.bounds = (600, 400)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
49 self.tracemagic = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
50 self.laststacksel = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
51
18176
cc7631fbf7f9 Override bdb's canonic() method with a no-op: with bdb's version we couldn't edit breakpoints in file-less ("Untitled" script windows). Besides, we did't need it as we always use full path names anyway.
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
52 def canonic(self, filename):
cc7631fbf7f9 Override bdb's canonic() method with a no-op: with bdb's version we couldn't edit breakpoints in file-less ("Untitled" script windows). Besides, we did't need it as we always use full path names anyway.
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
53 # override: the provided canonic() method breaks our
cc7631fbf7f9 Override bdb's canonic() method with a no-op: with bdb's version we couldn't edit breakpoints in file-less ("Untitled" script windows). Besides, we did't need it as we always use full path names anyway.
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
54 # file-less Untitled windows
cc7631fbf7f9 Override bdb's canonic() method with a no-op: with bdb's version we couldn't edit breakpoints in file-less ("Untitled" script windows). Besides, we did't need it as we always use full path names anyway.
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
55 return filename
cc7631fbf7f9 Override bdb's canonic() method with a no-op: with bdb's version we couldn't edit breakpoints in file-less ("Untitled" script windows). Besides, we did't need it as we always use full path names anyway.
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
56
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
57 def reset(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
58 self.currentframe = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
59 self.file = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
60 self.laststack = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
61 self.reason = 'Not running'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
62 self.continuewithoutdebugger = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
63 bdb.Bdb.reset(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
64 self.forget()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
65
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
66 def start(self, bottomframe = None, running = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
67 W.getapplication().DebuggerQuit = bdb.BdbQuit
19488
42b2f1936254 Import the MacOS toolbox modules from the Carbon package.
Jack Jansen <jack.jansen@cwi.nl>
parents: 18176
diff changeset
68 from Carbon import Menu
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
69 Menu.HiliteMenu(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
70 if self.closed:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
71 self.setupwidgets(self.title)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
72 self.closed = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
73 if not self.w.parent.debugger_quitting:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
74 self.w.select()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
75 raise W.AlertError, 'There is another debugger session busy.'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
76 self.reset()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
77 self.botframe = bottomframe
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
78 if running:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
79 self.set_continue()
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17845
diff changeset
80 self.reason = 'Running\xc9'
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
81 self.setstate('running')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
82 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
83 self.set_step()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
84 self.reason = 'stopped'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
85 self.setstate('stopped')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
86 sys.settrace(self.trace_dispatch)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
87
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
88 def stop(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
89 self.set_quit()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
90 if self.w.parent:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
91 self.exit_mainloop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
92 self.resetwidgets()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
93
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
94 def set_continue_without_debugger(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
95 sys.settrace(None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
96 self.set_quit()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
97 self.clear_tracefuncs()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
98 self.continuewithoutdebugger = 1
11324
c1b725b1a144 minor cleanup, avoiding rare traceback (jvr)
Just van Rossum <just@lettererror.com>
parents: 10087
diff changeset
99 if hasattr(self, "w") and self.w.parent:
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
100 self.exit_mainloop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
101 self.resetwidgets()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
102
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
103 def clear_tracefuncs(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
104 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
105 raise 'spam'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
106 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
107 pass
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
108 frame = sys.exc_traceback.tb_frame
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
109 while frame is not None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
110 del frame.f_trace
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
111 frame = frame.f_back
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
112
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
113 def postmortem(self, exc_type, exc_value, traceback):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
114 if self.closed:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
115 self.setupwidgets(self.title)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
116 self.closed = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
117 if not self.w.parent.debugger_quitting:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
118 raise W.AlertError, 'There is another debugger session busy.'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
119 self.reset()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
120 if traceback:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
121 self.botframe = traceback.tb_frame
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
122 while traceback.tb_next <> None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
123 traceback = traceback.tb_next
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
124 frame = traceback.tb_frame
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
125 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
126 self.botframe = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
127 frame = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
128 self.w.panes.bottom.buttons.killbutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
129 self.reason = '(dead) ' + self.formatexception(exc_type, exc_value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
130 self.w.select()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
131 self.setup(frame, traceback)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
132 self.setstate('dead')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
133 self.showstack(self.curindex)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
134 self.showframe(self.curindex)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
135
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
136 def setupwidgets(self, title):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
137 self.w = w = W.Window(self.bounds, title, minsize = (500, 300))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
138
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
139 w.panes = W.HorizontalPanes((8, 4, -8, -8), self.horpanes)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
140
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
141 w.panes.browserpanes = browserpanes = W.VerticalPanes(None, self.verpanes)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
142
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
143 browserpanes.stacklist = W.Group(None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
144 browserpanes.stacklist.title = W.TextBox((4, 0, 0, 12), 'Stack')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
145 browserpanes.stacklist.stack = W.List((0, 16, 0, 0), callback = self.do_stack, flags = Lists.lOnlyOne)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
146
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
147 browserpanes.locals = W.Group(None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
148 browserpanes.locals.title = W.TextBox((4, 0, 0, 12), 'Local variables')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
149 browserpanes.locals.browser = PyBrowser.BrowserWidget((0, 16, 0, 0))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
150
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
151 browserpanes.globals = W.Group(None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
152 browserpanes.globals.title = W.TextBox((4, 0, 0, 12), 'Global variables')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
153 browserpanes.globals.browser = PyBrowser.BrowserWidget((0, 16, 0, 0))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
154
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
155 w.panes.bottom = bottom = W.Group(None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
156 bottom.src = src = W.Group((0, 52, 0, 0))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
157 source = SourceViewer((1, 1, -15, -15), readonly = 1, debugger = self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
158 src.optionsmenu = W.PopupMenu((-16, 0, 16, 16), [])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
159 src.optionsmenu.bind('<click>', self.makeoptionsmenu)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
160
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
161 src._barx = W.Scrollbar((0, -16, -15, 16), source.hscroll, max = 32767)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
162 src._bary = W.Scrollbar((-16, 15, 16, -15), source.vscroll, max = 32767)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
163 src.source = source
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
164 src.frame = W.Frame((0, 0, -15, -15))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
165
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
166 bottom.tracingmonitor = TracingMonitor((0, 23, 6, 6))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
167 bottom.state = W.TextBox((12, 20, 0, 16), self.reason)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
168
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
169 bottom.srctitle = W.TextBox((12, 36, 0, 14))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
170 bottom.buttons = buttons = W.Group((12, 0, 0, 16))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
171
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
172 buttons.runbutton = W.Button((0, 0, 50, 16), "Run", self.do_run)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
173 buttons.stopbutton = W.Button((58, 0, 50, 16), "Stop", self.do_stop)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
174 buttons.killbutton = W.Button((116, 0, 50, 16), "Kill", self.do_kill)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
175 buttons.line = W.VerticalLine((173, 0, 0, 0))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
176 buttons.stepbutton = W.Button((181, 0, 50, 16), "Step", self.do_step)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
177 buttons.stepinbutton = W.Button((239, 0, 50, 16), "Step in", self.do_stepin)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
178 buttons.stepoutbutton = W.Button((297, 0, 50, 16), "Step out", self.do_stepout)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
179
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
180 w.bind('cmdr', buttons.runbutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
181 w.bind('cmd.', buttons.stopbutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
182 w.bind('cmdk', buttons.killbutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
183 w.bind('cmds', buttons.stepbutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
184 w.bind('cmdt', buttons.stepinbutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
185 w.bind('cmdu', buttons.stepoutbutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
186
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
187 w.bind('<close>', self.close)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
188
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
189 w.open()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
190 w.xxx___select(w.panes.bottom.src.source)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
191
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
192 def makeoptionsmenu(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
193 options = [('Clear breakpoints', self.w.panes.bottom.src.source.clearbreakpoints),
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
194 ('Clear all breakpoints', self.clear_all_breaks),
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17845
diff changeset
195 ('Edit breakpoints\xc9', self.edit_breaks), '-',
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
196 (self.tracemagic and
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
197 'Disable __magic__ tracing' or 'Enable __magic__ tracing', self.togglemagic)]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
198 self.w.panes.bottom.src.optionsmenu.set(options)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
199
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
200 def edit_breaks(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
201 if self.breaksviewer:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
202 self.breaksviewer.select()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
203 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
204 self.breaksviewer = BreakpointsViewer(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
205
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
206 def togglemagic(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
207 self.tracemagic = not self.tracemagic
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
208
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
209 def setstate(self, state):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
210 self.w.panes.bottom.tracingmonitor.reset()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
211 self.w.panes.bottom.state.set(self.reason)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
212 buttons = self.w.panes.bottom.buttons
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
213 if state == 'stopped':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
214 buttons.runbutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
215 buttons.stopbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
216 buttons.killbutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
217 buttons.stepbutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
218 buttons.stepinbutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
219 buttons.stepoutbutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
220 elif state == 'running':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
221 buttons.runbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
222 buttons.stopbutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
223 buttons.killbutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
224 buttons.stepbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
225 buttons.stepinbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
226 buttons.stepoutbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
227 elif state == 'idle':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
228 buttons.runbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
229 buttons.stopbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
230 buttons.killbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
231 buttons.stepbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
232 buttons.stepinbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
233 buttons.stepoutbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
234 elif state == 'dead':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
235 buttons.runbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
236 buttons.stopbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
237 buttons.killbutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
238 buttons.stepbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
239 buttons.stepinbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
240 buttons.stepoutbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
241 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
242 print 'unknown state:', state
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
243
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
244 def resetwidgets(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
245 self.reason = ''
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
246 self.w.panes.bottom.srctitle.set('')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
247 self.w.panes.bottom.src.source.set('')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
248 self.w.panes.browserpanes.stacklist.stack.set([])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
249 self.w.panes.browserpanes.locals.browser.set({})
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
250 self.w.panes.browserpanes.globals.browser.set({})
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
251 self.setstate('idle')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
252
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
253 # W callbacks
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
254
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
255 def close(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
256 self.set_quit()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
257 self.exit_mainloop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
258 self.closed = 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
259
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
260 self.unregister_editor(self.w.panes.bottom.src.source,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
261 self.w.panes.bottom.src.source.file)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
262 self.horpanes = self.w.panes.getpanesizes()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
263 self.verpanes = self.w.panes.browserpanes.getpanesizes()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
264 self.bounds = self.w.getbounds()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
265 prefs = W.getapplication().getprefs()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
266 prefs.debugger.breaks = self.breaks
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
267 prefs.debugger.windowsettings = self.bounds, self.horpanes, self.verpanes
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
268 prefs.debugger.tracemagic = self.tracemagic
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
269 prefs.save()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
270
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
271 # stack list callback
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
272
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
273 def do_stack(self, isdbl):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
274 sel = self.w.panes.browserpanes.stacklist.stack.getselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
275 if isdbl:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
276 if sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
277 frame, lineno = self.stack[sel[0] + 1]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
278 filename = frame.f_code.co_filename
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
279 editor = self.w._parentwindow.parent.openscript(filename, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
280 if self.breaks.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
281 editor.showbreakpoints(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
282 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
283 if sel and sel <> self.laststacksel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
284 self.showframe(sel[0] + 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
285 self.laststacksel = sel
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
286
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
287 def geteditor(self, filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
288 if filename[:1] == '<' and filename[-1:] == '>':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
289 editor = W.getapplication().getscript(filename[1:-1])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
290 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
291 editor = W.getapplication().getscript(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
292 return editor
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
293
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
294 # button callbacks
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
295
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
296 def do_run(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
297 self.running()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
298 self.set_continue()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
299 self.exit_mainloop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
300
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
301 def do_stop(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
302 self.set_step()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
303
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
304 def do_kill(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
305 self.set_quit()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
306 self.exit_mainloop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
307 self.resetwidgets()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
308
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
309 def do_step(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
310 self.running()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
311 self.set_next(self.curframe)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
312 self.exit_mainloop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
313
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
314 def do_stepin(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
315 self.running()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
316 self.set_step()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
317 self.exit_mainloop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
318
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
319 def do_stepout(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
320 self.running()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
321 self.set_return(self.curframe)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
322 self.exit_mainloop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
323
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
324 def running(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
325 W.SetCursor('watch')
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17845
diff changeset
326 self.reason = 'Running\xc9'
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
327 self.setstate('running')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
328 #self.w.panes.bottom.src.source.set('')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
329 #self.w.panes.browserpanes.stacklist.stack.set([])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
330 #self.w.panes.browserpanes.locals.browser.set({})
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
331 #self.w.panes.browserpanes.globals.browser.set({})
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
332
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
333 def exit_mainloop(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
334 self.w.parent.debugger_quitting = 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
335
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
336 #
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
337
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
338 def showframe(self, stackindex):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
339 (frame, lineno) = self.stack[stackindex]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
340 W.SetCursor('watch')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
341 filename = frame.f_code.co_filename
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
342 if filename <> self.file:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
343 editor = self.geteditor(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
344 if editor:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
345 self.w.panes.bottom.src.source.set(editor.get(), filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
346 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
347 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
348 f = open(filename, 'rb')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
349 data = f.read()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
350 f.close()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
351 except IOError:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
352 if filename[-3:] == '.py':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
353 import imp
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
354 modname = os.path.basename(filename)[:-3]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
355 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
356 f, filename, (suff, mode, dummy) = imp.find_module(modname)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
357 except ImportError:
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17845
diff changeset
358 self.w.panes.bottom.src.source.set("can't find file")
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
359 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
360 if f:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
361 f.close()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
362 if f and suff == '.py':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
363 f = open(filename, 'rb')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
364 data = f.read()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
365 f.close()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
366 self.w.panes.bottom.src.source.set(data, filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
367 else:
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17845
diff changeset
368 self.w.panes.bottom.src.source.set("can't find file")
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
369 else:
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17845
diff changeset
370 self.w.panes.bottom.src.source.set("can't find file")
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
371 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
372 self.w.panes.bottom.src.source.set(data, filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
373 self.file = filename
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
374 self.w.panes.bottom.srctitle.set('Source: ' + filename + ((lineno > 0) and (' (line %d)' % lineno) or ' '))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
375 self.goto_line(lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
376 self.lineno = lineno
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
377 self.showvars((frame, lineno))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
378
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
379 def showvars(self, (frame, lineno)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
380 if frame.f_locals is not frame.f_globals:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
381 locals = frame.f_locals
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
382 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
383 locals = {'Same as Globals':''}
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
384 filteredlocals = {}
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
385 for key, value in locals.items():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
386 # empty key is magic for Python 1.4; '.' is magic for 1.5...
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
387 if not key or key[0] <> '.':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
388 filteredlocals[key] = value
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
389 self.w.panes.browserpanes.locals.browser.set(filteredlocals)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
390 self.w.panes.browserpanes.globals.browser.set(frame.f_globals)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
391
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
392 def showstack(self, stackindex):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
393 stack = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
394 for frame, lineno in self.stack[1:]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
395 filename = frame.f_code.co_filename
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
396 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
397 filename = _filenames[filename]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
398 except KeyError:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
399 if filename[:1] + filename[-1:] <> '<>':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
400 filename = os.path.basename(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
401 _filenames[frame.f_code.co_filename] = filename
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
402 funcname = frame.f_code.co_name
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
403 if funcname == '?':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
404 funcname = '<toplevel>'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
405 stack.append(filename + ': ' + funcname)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
406 if stack <> self.laststack:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
407 self.w.panes.browserpanes.stacklist.stack.set(stack)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
408 self.laststack = stack
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
409 sel = [stackindex - 1]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
410 self.w.panes.browserpanes.stacklist.stack.setselection(sel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
411 self.laststacksel = sel
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
412
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
413 def goto_line(self, lineno):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
414 if lineno > 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
415 self.w.panes.bottom.src.source.selectline(lineno - 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
416 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
417 self.w.panes.bottom.src.source.setselection(0, 0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
418
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
419 # bdb entry points
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
420
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
421 # def user_call(self, frame, argument_list):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
422 # self.reason = 'Calling'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
423 # self.interaction(frame, None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
424
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
425 def user_line(self, frame):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
426 # This function is called when we stop or break at this line
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
427 self.reason = 'Stopped'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
428 self.interaction(frame, None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
429
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
430 def user_return(self, frame, return_value):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
431 # This function is called when a return trap is set here
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
432 fname = frame.f_code.co_name
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
433 if fname <> '?':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
434 self.reason = 'Returning from %s()' % frame.f_code.co_name
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
435 frame.f_locals['__return__'] = return_value
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
436 elif frame.f_back is self.botframe:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
437 self.reason = 'Done'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
438 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
439 self.reason = 'Returning'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
440 self.interaction(frame, None, 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
441
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
442 def user_exception(self, frame, (exc_type, exc_value, exc_traceback)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
443 # This function is called when we stop or break at this line
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
444 self.reason = self.formatexception(exc_type, exc_value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
445 self.interaction(frame, exc_traceback)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
446
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
447 def formatexception(self, exc_type, exc_value):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
448 if exc_type == SyntaxError:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
449 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
450 value, (filename, lineno, charno, line) = exc_value
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
451 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
452 pass
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
453 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
454 return str(exc_type) + ': ' + str(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
455 if type(exc_type) == types.ClassType:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
456 nice = exc_type.__name__
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
457 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
458 nice = str(exc_type)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
459 value = str(exc_value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
460 if exc_value and value:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
461 nice = nice + ": " + value
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
462 return nice
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
463
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
464 def forget(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
465 self.stack = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
466 self.curindex = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
467 self.curframe = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
468
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
469 def setup(self, f, t, isreturning = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
470 self.forget()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
471 self.stack, self.curindex = self.get_stack(f, t)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
472 self.curframe = self.stack[self.curindex - isreturning][0]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
473
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
474 def interaction(self, frame, traceback, isreturning = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
475 saveport = Qd.GetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
476 self.w.select()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
477 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
478 self.setup(frame, traceback, isreturning)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
479 self.setstate('stopped')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
480 stackindex = self.curindex
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
481 if isreturning:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
482 if frame.f_back is not self.botframe:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
483 stackindex = stackindex - 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
484 self.showstack(stackindex)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
485 self.showframe(stackindex)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
486 self.w.parent.debugger_mainloop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
487 self.forget()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
488 finally:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
489 Qd.SetPort(saveport)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
490
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
491 # bdb customization
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
492
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
493 def trace_dispatch(self, frame, event, arg, TickCount = Evt.TickCount):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
494 if TickCount() - self.tracingmonitortime > 15:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
495 self.tracingmonitortime = TickCount()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
496 self.w.panes.bottom.tracingmonitor.toggle()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
497 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
498 try:
22211
239269c96514 Backport of 1.9 (missed last time around):
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
499 if hasattr(MacOS, 'EnableAppswitch'):
239269c96514 Backport of 1.9 (missed last time around):
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
500 MacOS.EnableAppswitch(0)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
501 if self.quitting:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
502 # returning None is not enough, a former BdbQuit exception
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
503 # might have been eaten by the print statement
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
504 raise bdb.BdbQuit
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
505 if event == 'line':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
506 return self.dispatch_line(frame)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
507 if event == 'call':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
508 return self.dispatch_call(frame, arg)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
509 if event == 'return':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
510 return self.dispatch_return(frame, arg)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
511 if event == 'exception':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
512 return self.dispatch_exception(frame, arg)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
513 print 'bdb.Bdb.dispatch: unknown debugging event:', `event`
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
514 return self.trace_dispatch
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
515 finally:
22211
239269c96514 Backport of 1.9 (missed last time around):
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
516 if hasattr(MacOS, 'EnableAppswitch'):
239269c96514 Backport of 1.9 (missed last time around):
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
517 MacOS.EnableAppswitch(-1)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
518 except KeyboardInterrupt:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
519 self.set_step()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
520 return self.trace_dispatch
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
521 except bdb.BdbQuit:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
522 if self.continuewithoutdebugger:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
523 self.clear_tracefuncs()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
524 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
525 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
526 raise bdb.BdbQuit
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
527 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
528 print 'XXX Exception during debugger interaction.', \
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
529 self.formatexception(sys.exc_type, sys.exc_value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
530 import traceback
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
531 traceback.print_exc()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
532 return self.trace_dispatch
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
533
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
534 def dispatch_call(self, frame, arg):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
535 if not self.tracemagic and \
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
536 frame.f_code.co_name[:2] == '__' == frame.f_code.co_name[-2:] and \
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
537 frame.f_code.co_name <> '__init__':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
538 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
539 if self.botframe is None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
540 # First call of dispatch since reset()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
541 self.botframe = frame.f_back # xxx !!! added f_back
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
542 return self.trace_dispatch
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
543 if not (self.stop_here(frame) or self.break_anywhere(frame)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
544 # No need to trace this function
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
545 return # None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
546 self.user_call(frame, arg)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
547 if self.quitting:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
548 raise bdb.BdbQuit
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
549 return self.trace_dispatch
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
550
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
551 def set_continue(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
552 # Don't stop except at breakpoints or when finished
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
553 self.stopframe = self.botframe
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
554 self.returnframe = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
555 self.quitting = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
556 # unlike in bdb/pdb, there's a chance that breakpoints change
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
557 # *while* a program (this program ;-) is running. It's actually quite likely.
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
558 # So we don't delete frame.f_trace until the bottom frame if there are no breakpoints.
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
559
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
560 def set_break(self, filename, lineno):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
561 if not self.breaks.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
562 self.breaks[filename] = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
563 list = self.breaks[filename]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
564 if lineno in list:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
565 return 'There is already a breakpoint there!'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
566 list.append(lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
567 list.sort() # I want to keep them neatly sorted; easier for drawing
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
568 if hasattr(bdb, "Breakpoint"):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
569 # 1.5.2b1 specific
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
570 bp = bdb.Breakpoint(filename, lineno, 0, None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
571 self.update_breaks(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
572
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
573 def clear_break(self, filename, lineno):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
574 bdb.Bdb.clear_break(self, filename, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
575 self.update_breaks(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
576
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
577 def clear_all_file_breaks(self, filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
578 bdb.Bdb.clear_all_file_breaks(self, filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
579 self.update_breaks(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
580
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
581 def clear_all_breaks(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
582 bdb.Bdb.clear_all_breaks(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
583 for editors in self.editors.values():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
584 for editor in editors:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
585 editor.drawbreakpoints()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
586
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
587 # special
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
588
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
589 def toggle_break(self, filename, lineno):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
590 if self.get_break(filename, lineno):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
591 self.clear_break(filename, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
592 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
593 self.set_break(filename, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
594
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
595 def clear_breaks_above(self, filename, above):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
596 if not self.breaks.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
597 return 'There are no breakpoints in that file!'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
598 for lineno in self.breaks[filename][:]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
599 if lineno > above:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
600 self.breaks[filename].remove(lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
601 if not self.breaks[filename]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
602 del self.breaks[filename]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
603
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
604 # editor stuff
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
605
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
606 def update_breaks(self, filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
607 if self.breaksviewer:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
608 self.breaksviewer.update()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
609 if self.editors.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
610 for editor in self.editors[filename]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
611 if editor._debugger: # XXX
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
612 editor.drawbreakpoints()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
613 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
614 print 'xxx dead editor!'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
615
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
616 def update_allbreaks(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
617 if self.breaksviewer:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
618 self.breaksviewer.update()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
619 for filename in self.breaks.keys():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
620 if self.editors.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
621 for editor in self.editors[filename]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
622 if editor._debugger: # XXX
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
623 editor.drawbreakpoints()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
624 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
625 print 'xxx dead editor!'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
626
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
627 def register_editor(self, editor, filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
628 if not filename:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
629 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
630 if not self.editors.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
631 self.editors[filename] = [editor]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
632 elif editor not in self.editors[filename]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
633 self.editors[filename].append(editor)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
634
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
635 def unregister_editor(self, editor, filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
636 if not filename:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
637 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
638 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
639 self.editors[filename].remove(editor)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
640 if not self.editors[filename]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
641 del self.editors[filename]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
642 # if this was an untitled window, clear the breaks.
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
643 if filename[:1] == '<' and filename[-1:] == '>' and \
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
644 self.breaks.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
645 self.clear_all_file_breaks(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
646 except (KeyError, ValueError):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
647 pass
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
648
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
649
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
650 class SourceViewer(W.PyEditor):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
651
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
652 def __init__(self, *args, **kwargs):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
653 apply(W.PyEditor.__init__, (self,) + args, kwargs)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
654 self.bind('<click>', self.clickintercept)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
655
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
656 def clickintercept(self, point, modifiers):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
657 if self._parentwindow._currentwidget <> self and not self.pt_in_breaks(point):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
658 self._parentwindow.xxx___select(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
659 return 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
660
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
661 def _getviewrect(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
662 l, t, r, b = self._bounds
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
663 if self._debugger:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
664 return (l + 12, t + 2, r - 1, b - 2)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
665 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
666 return (l + 5, t + 2, r - 1, b - 2)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
667
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
668 def select(self, onoff, isclick = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
669 if W.SelectableWidget.select(self, onoff):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
670 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
671 self.SetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
672 #if onoff:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
673 # self.ted.WEActivate()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
674 #else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
675 # self.ted.WEDeactivate()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
676 self.drawselframe(onoff)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
677
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
678 def drawselframe(self, onoff):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
679 pass
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
680
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
681
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
682 class BreakpointsViewer:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
683
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
684 def __init__(self, debugger):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
685 self.debugger = debugger
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
686 self.w = W.Window((300, 250), 'Breakpoints', minsize = (200, 200))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
687 self.w.panes = W.HorizontalPanes((8, 8, -8, -32), (0.3, 0.7))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
688 self.w.panes.files = W.List(None, callback = self.filehit) #, flags = Lists.lOnlyOne)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
689 self.w.panes.gr = W.Group(None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
690 self.w.panes.gr.breaks = W.List((0, 0, -130, 0), callback = self.linehit) #, flags = Lists.lOnlyOne)
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17845
diff changeset
691 self.w.panes.gr.openbutton = W.Button((-80, 4, 0, 16), 'View\xc9', self.openbuttonhit)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
692 self.w.panes.gr.deletebutton = W.Button((-80, 28, 0, 16), 'Delete', self.deletebuttonhit)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
693
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
694 self.w.bind('<close>', self.close)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
695 self.w.bind('backspace', self.w.panes.gr.deletebutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
696
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
697 self.setup()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
698 self.w.open()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
699 self.w.panes.gr.openbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
700 self.w.panes.gr.deletebutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
701 self.curfile = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
702
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
703 def deletebuttonhit(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
704 if self.w._currentwidget == self.w.panes.files:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
705 self.del_filename()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
706 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
707 self.del_number()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
708 self.checkbuttons()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
709
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
710 def del_number(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
711 if self.curfile is None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
712 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
713 sel = self.w.panes.gr.breaks.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
714 for lineno in sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
715 self.debugger.clear_break(self.curfile, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
716
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
717 def del_filename(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
718 sel = self.w.panes.files.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
719 for filename in sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
720 self.debugger.clear_all_file_breaks(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
721 self.debugger.update_allbreaks()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
722
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
723 def setup(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
724 files = self.debugger.breaks.keys()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
725 files.sort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
726 self.w.panes.files.set(files)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
727
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
728 def close(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
729 self.debugger.breaksviewer = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
730 self.debugger = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
731
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
732 def update(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
733 sel = self.w.panes.files.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
734 self.setup()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
735 self.w.panes.files.setselectedobjects(sel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
736 sel = self.w.panes.files.getselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
737 if len(sel) == 0 and self.curfile:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
738 self.w.panes.files.setselectedobjects([self.curfile])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
739 self.filehit(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
740
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
741 def select(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
742 self.w.select()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
743
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
744 def selectfile(self, file):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
745 self.w.panes.files.setselectedobjects([file])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
746 self.filehit(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
747
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
748 def openbuttonhit(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
749 self.filehit(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
750
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
751 def filehit(self, isdbl):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
752 sel = self.w.panes.files.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
753 if isdbl:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
754 for filename in sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
755 lineno = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
756 if filename == self.curfile:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
757 linesel = self.w.panes.gr.breaks.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
758 if linesel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
759 lineno = linesel[-1]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
760 elif self.w.panes.gr.breaks:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
761 lineno = self.w.panes.gr.breaks[0]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
762 editor = self.w._parentwindow.parent.openscript(filename, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
763 editor.showbreakpoints(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
764 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
765 if len(sel) == 1:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
766 file = sel[0]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
767 filebreaks = self.debugger.breaks[file][:]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
768 if self.curfile == file:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
769 linesel = self.w.panes.gr.breaks.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
770 self.w.panes.gr.breaks.set(filebreaks)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
771 if self.curfile == file:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
772 self.w.panes.gr.breaks.setselectedobjects(linesel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
773 self.curfile = file
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
774 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
775 if len(sel) <> 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
776 self.curfile = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
777 self.w.panes.gr.breaks.set([])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
778 self.checkbuttons()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
779
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
780 def linehit(self, isdbl):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
781 if isdbl:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
782 files = self.w.panes.files.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
783 if len(files) <> 1:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
784 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
785 filename = files[0]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
786 linenos = self.w.panes.gr.breaks.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
787 if not linenos:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
788 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
789 lineno = linenos[-1]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
790 editor = self.w._parentwindow.parent.openscript(filename, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
791 editor.showbreakpoints(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
792 self.checkbuttons()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
793
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
794 def checkbuttons(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
795 if self.w.panes.files.getselection():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
796 self.w.panes.gr.openbutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
797 self.w._parentwindow.setdefaultbutton(self.w.panes.gr.openbutton)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
798 if self.w._currentwidget == self.w.panes.files:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
799 if self.w.panes.files.getselection():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
800 self.w.panes.gr.deletebutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
801 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
802 self.w.panes.gr.deletebutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
803 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
804 if self.w.panes.gr.breaks.getselection():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
805 self.w.panes.gr.deletebutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
806 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
807 self.w.panes.gr.deletebutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
808 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
809 self.w.panes.gr.openbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
810 self.w.panes.gr.deletebutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
811
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
812
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
813 class TracingMonitor(W.Widget):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
814
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
815 def __init__(self, *args, **kwargs):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
816 apply(W.Widget.__init__, (self,) + args, kwargs)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
817 self.state = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
818
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
819 def toggle(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
820 if hasattr(self, "_parentwindow") and self._parentwindow is not None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
821 self.state = self.state % 2 + 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
822 port = Qd.GetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
823 self.SetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
824 self.draw()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
825 Qd.SetPort(port)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
826
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
827 def reset(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
828 if self._parentwindow:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
829 self.state = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
830 port = Qd.GetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
831 self.SetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
832 self.draw()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
833 Qd.SetPort(port)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
834
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
835 def draw(self, visRgn = None):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
836 if self.state == 2:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
837 Qd.PaintOval(self._bounds)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
838 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
839 Qd.EraseOval(self._bounds)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
840
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
841
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
842 # convenience funcs
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
843
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
844 def postmortem(exc_type, exc_value, tb):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
845 d = getdebugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
846 d.postmortem(exc_type, exc_value, tb)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
847
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
848 def start(bottomframe = None):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
849 d = getdebugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
850 d.start(bottomframe)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
851
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
852 def startfromhere():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
853 d = getdebugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
854 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
855 raise 'spam'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
856 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
857 frame = sys.exc_traceback.tb_frame.f_back
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
858 d.start(frame)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
859
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
860 def startfrombottom():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
861 d = getdebugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
862 d.start(_getbottomframe(), 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
863
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
864 def stop():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
865 d = getdebugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
866 d.stop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
867
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
868 def cont():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
869 sys.settrace(None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
870 d = getdebugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
871 d.set_continue_without_debugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
872
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
873 def _getbottomframe():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
874 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
875 raise 'spam'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
876 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
877 pass
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
878 frame = sys.exc_traceback.tb_frame
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
879 while 1:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
880 if frame.f_code.co_name == 'mainloop' or frame.f_back is None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
881 break
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
882 frame = frame.f_back
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
883 return frame
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
884
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
885 _debugger = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
886
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
887 def getdebugger():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
888 if not __debug__:
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17845
diff changeset
889 raise W.AlertError, "Can't debug in \"Optimize bytecode\" mode.\r(see \"Default startup options\" in EditPythonPreferences)"
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
890 global _debugger
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
891 if _debugger is None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
892 _debugger = Debugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
893 return _debugger