annotate Mac/Tools/IDE/PyDebugger.py @ 26650:caa245af7786 legacy-trunk

Tweaked some button sizes to make them look better on OSX.
author Jack Jansen <jack.jansen@cwi.nl>
date Fri, 13 Dec 2002 23:31:55 +0000
parents 778f7221f955
children 9e737d63f380
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))
26650
caa245af7786 Tweaked some button sizes to make them look better on OSX.
Jack Jansen <jack.jansen@cwi.nl>
parents: 25238
diff changeset
176 buttons.stepbutton = W.Button((181, 0, 60, 16), "Step", self.do_step)
caa245af7786 Tweaked some button sizes to make them look better on OSX.
Jack Jansen <jack.jansen@cwi.nl>
parents: 25238
diff changeset
177 buttons.stepinbutton = W.Button((249, 0, 60, 16), "Step in", self.do_stepin)
caa245af7786 Tweaked some button sizes to make them look better on OSX.
Jack Jansen <jack.jansen@cwi.nl>
parents: 25238
diff changeset
178 buttons.stepoutbutton = W.Button((317, 0, 60, 16), "Step out", self.do_stepout)
10047
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:
25238
778f7221f955 Mode rU for universal newlines, not rT. Spotted by Guido.
Jack Jansen <jack.jansen@cwi.nl>
parents: 25223
diff changeset
348 f = open(filename, 'rU')
10047
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':
25238
778f7221f955 Mode rU for universal newlines, not rT. Spotted by Guido.
Jack Jansen <jack.jansen@cwi.nl>
parents: 25223
diff changeset
363 f = open(filename, 'rU')
10047
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:
25223
2b1701cd4566 The debugger source view only understood mac-style linefeeds. Fixed.
Jack Jansen <jack.jansen@cwi.nl>
parents: 21772
diff changeset
372 data = data.replace('\n', '\r')
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
373 self.w.panes.bottom.src.source.set(data, filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
374 self.file = filename
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
375 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
376 self.goto_line(lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
377 self.lineno = lineno
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
378 self.showvars((frame, lineno))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
379
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
380 def showvars(self, (frame, lineno)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
381 if frame.f_locals is not frame.f_globals:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
382 locals = frame.f_locals
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
383 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
384 locals = {'Same as Globals':''}
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
385 filteredlocals = {}
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
386 for key, value in locals.items():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
387 # 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
388 if not key or key[0] <> '.':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
389 filteredlocals[key] = value
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
390 self.w.panes.browserpanes.locals.browser.set(filteredlocals)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
391 self.w.panes.browserpanes.globals.browser.set(frame.f_globals)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
392
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
393 def showstack(self, stackindex):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
394 stack = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
395 for frame, lineno in self.stack[1:]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
396 filename = frame.f_code.co_filename
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
397 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
398 filename = _filenames[filename]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
399 except KeyError:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
400 if filename[:1] + filename[-1:] <> '<>':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
401 filename = os.path.basename(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
402 _filenames[frame.f_code.co_filename] = filename
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
403 funcname = frame.f_code.co_name
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
404 if funcname == '?':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
405 funcname = '<toplevel>'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
406 stack.append(filename + ': ' + funcname)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
407 if stack <> self.laststack:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
408 self.w.panes.browserpanes.stacklist.stack.set(stack)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
409 self.laststack = stack
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
410 sel = [stackindex - 1]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
411 self.w.panes.browserpanes.stacklist.stack.setselection(sel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
412 self.laststacksel = sel
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
413
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
414 def goto_line(self, lineno):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
415 if lineno > 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
416 self.w.panes.bottom.src.source.selectline(lineno - 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
417 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
418 self.w.panes.bottom.src.source.setselection(0, 0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
419
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
420 # bdb entry points
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
421
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
422 # def user_call(self, frame, argument_list):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
423 # self.reason = 'Calling'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
424 # self.interaction(frame, None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
425
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
426 def user_line(self, frame):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
427 # 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
428 self.reason = 'Stopped'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
429 self.interaction(frame, None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
430
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
431 def user_return(self, frame, return_value):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
432 # This function is called when a return trap is set here
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
433 fname = frame.f_code.co_name
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
434 if fname <> '?':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
435 self.reason = 'Returning from %s()' % frame.f_code.co_name
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
436 frame.f_locals['__return__'] = return_value
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
437 elif frame.f_back is self.botframe:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
438 self.reason = 'Done'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
439 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
440 self.reason = 'Returning'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
441 self.interaction(frame, None, 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
442
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
443 def user_exception(self, frame, (exc_type, exc_value, exc_traceback)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
444 # 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
445 self.reason = self.formatexception(exc_type, exc_value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
446 self.interaction(frame, exc_traceback)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
447
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
448 def formatexception(self, exc_type, exc_value):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
449 if exc_type == SyntaxError:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
450 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
451 value, (filename, lineno, charno, line) = exc_value
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
452 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
453 pass
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
454 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
455 return str(exc_type) + ': ' + str(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
456 if type(exc_type) == types.ClassType:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
457 nice = exc_type.__name__
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
458 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
459 nice = str(exc_type)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
460 value = str(exc_value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
461 if exc_value and value:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
462 nice = nice + ": " + value
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
463 return nice
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
464
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
465 def forget(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
466 self.stack = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
467 self.curindex = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
468 self.curframe = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
469
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
470 def setup(self, f, t, isreturning = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
471 self.forget()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
472 self.stack, self.curindex = self.get_stack(f, t)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
473 self.curframe = self.stack[self.curindex - isreturning][0]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
474
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
475 def interaction(self, frame, traceback, isreturning = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
476 saveport = Qd.GetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
477 self.w.select()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
478 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
479 self.setup(frame, traceback, isreturning)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
480 self.setstate('stopped')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
481 stackindex = self.curindex
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
482 if isreturning:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
483 if frame.f_back is not self.botframe:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
484 stackindex = stackindex - 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
485 self.showstack(stackindex)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
486 self.showframe(stackindex)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
487 self.w.parent.debugger_mainloop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
488 self.forget()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
489 finally:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
490 Qd.SetPort(saveport)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
491
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
492 # bdb customization
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
493
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
494 def trace_dispatch(self, frame, event, arg, TickCount = Evt.TickCount):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
495 if TickCount() - self.tracingmonitortime > 15:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
496 self.tracingmonitortime = TickCount()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
497 self.w.panes.bottom.tracingmonitor.toggle()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
498 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
499 try:
21772
ec750e37671b Changes by Donovan Preston (and a few minor ones by me) to make IDE run under
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
500 if hasattr(MacOS, 'EnableAppswitch'):
ec750e37671b Changes by Donovan Preston (and a few minor ones by me) to make IDE run under
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
501 MacOS.EnableAppswitch(0)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
502 if self.quitting:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
503 # returning None is not enough, a former BdbQuit exception
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
504 # might have been eaten by the print statement
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
505 raise bdb.BdbQuit
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
506 if event == 'line':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
507 return self.dispatch_line(frame)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
508 if event == 'call':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
509 return self.dispatch_call(frame, arg)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
510 if event == 'return':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
511 return self.dispatch_return(frame, arg)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
512 if event == 'exception':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
513 return self.dispatch_exception(frame, arg)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
514 print 'bdb.Bdb.dispatch: unknown debugging event:', `event`
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
515 return self.trace_dispatch
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
516 finally:
21772
ec750e37671b Changes by Donovan Preston (and a few minor ones by me) to make IDE run under
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
517 if hasattr(MacOS, 'EnableAppswitch'):
ec750e37671b Changes by Donovan Preston (and a few minor ones by me) to make IDE run under
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
518 MacOS.EnableAppswitch(-1)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
519 except KeyboardInterrupt:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
520 self.set_step()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
521 return self.trace_dispatch
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
522 except bdb.BdbQuit:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
523 if self.continuewithoutdebugger:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
524 self.clear_tracefuncs()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
525 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
526 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
527 raise bdb.BdbQuit
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
528 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
529 print 'XXX Exception during debugger interaction.', \
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
530 self.formatexception(sys.exc_type, sys.exc_value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
531 import traceback
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
532 traceback.print_exc()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
533 return self.trace_dispatch
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
534
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
535 def dispatch_call(self, frame, arg):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
536 if not self.tracemagic and \
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
537 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
538 frame.f_code.co_name <> '__init__':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
539 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
540 if self.botframe is None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
541 # First call of dispatch since reset()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
542 self.botframe = frame.f_back # xxx !!! added f_back
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
543 return self.trace_dispatch
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
544 if not (self.stop_here(frame) or self.break_anywhere(frame)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
545 # No need to trace this function
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
546 return # None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
547 self.user_call(frame, arg)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
548 if self.quitting:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
549 raise bdb.BdbQuit
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
550 return self.trace_dispatch
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
551
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
552 def set_continue(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
553 # Don't stop except at breakpoints or when finished
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
554 self.stopframe = self.botframe
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
555 self.returnframe = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
556 self.quitting = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
557 # unlike in bdb/pdb, there's a chance that breakpoints change
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
558 # *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
559 # 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
560
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
561 def set_break(self, filename, lineno):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
562 if not self.breaks.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
563 self.breaks[filename] = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
564 list = self.breaks[filename]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
565 if lineno in list:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
566 return 'There is already a breakpoint there!'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
567 list.append(lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
568 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
569 if hasattr(bdb, "Breakpoint"):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
570 # 1.5.2b1 specific
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
571 bp = bdb.Breakpoint(filename, lineno, 0, None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
572 self.update_breaks(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
573
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
574 def clear_break(self, filename, lineno):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
575 bdb.Bdb.clear_break(self, filename, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
576 self.update_breaks(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
577
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
578 def clear_all_file_breaks(self, filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
579 bdb.Bdb.clear_all_file_breaks(self, filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
580 self.update_breaks(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
581
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
582 def clear_all_breaks(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
583 bdb.Bdb.clear_all_breaks(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
584 for editors in self.editors.values():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
585 for editor in editors:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
586 editor.drawbreakpoints()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
587
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
588 # special
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
589
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
590 def toggle_break(self, filename, lineno):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
591 if self.get_break(filename, lineno):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
592 self.clear_break(filename, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
593 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
594 self.set_break(filename, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
595
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
596 def clear_breaks_above(self, filename, above):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
597 if not self.breaks.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
598 return 'There are no breakpoints in that file!'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
599 for lineno in self.breaks[filename][:]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
600 if lineno > above:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
601 self.breaks[filename].remove(lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
602 if not self.breaks[filename]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
603 del self.breaks[filename]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
604
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
605 # editor stuff
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
606
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
607 def update_breaks(self, filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
608 if self.breaksviewer:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
609 self.breaksviewer.update()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
610 if self.editors.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
611 for editor in self.editors[filename]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
612 if editor._debugger: # XXX
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
613 editor.drawbreakpoints()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
614 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
615 print 'xxx dead editor!'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
616
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
617 def update_allbreaks(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
618 if self.breaksviewer:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
619 self.breaksviewer.update()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
620 for filename in self.breaks.keys():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
621 if self.editors.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
622 for editor in self.editors[filename]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
623 if editor._debugger: # XXX
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
624 editor.drawbreakpoints()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
625 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
626 print 'xxx dead editor!'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
627
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
628 def register_editor(self, editor, filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
629 if not filename:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
630 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
631 if not self.editors.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
632 self.editors[filename] = [editor]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
633 elif editor not in self.editors[filename]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
634 self.editors[filename].append(editor)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
635
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
636 def unregister_editor(self, editor, filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
637 if not filename:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
638 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
639 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
640 self.editors[filename].remove(editor)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
641 if not self.editors[filename]:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
642 del self.editors[filename]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
643 # if this was an untitled window, clear the breaks.
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
644 if filename[:1] == '<' and filename[-1:] == '>' and \
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
645 self.breaks.has_key(filename):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
646 self.clear_all_file_breaks(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
647 except (KeyError, ValueError):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
648 pass
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
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
651 class SourceViewer(W.PyEditor):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
652
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
653 def __init__(self, *args, **kwargs):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
654 apply(W.PyEditor.__init__, (self,) + args, kwargs)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
655 self.bind('<click>', self.clickintercept)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
656
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
657 def clickintercept(self, point, modifiers):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
658 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
659 self._parentwindow.xxx___select(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
660 return 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
661
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
662 def _getviewrect(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
663 l, t, r, b = self._bounds
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
664 if self._debugger:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
665 return (l + 12, t + 2, r - 1, b - 2)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
666 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
667 return (l + 5, t + 2, r - 1, b - 2)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
668
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
669 def select(self, onoff, isclick = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
670 if W.SelectableWidget.select(self, onoff):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
671 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
672 self.SetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
673 #if onoff:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
674 # self.ted.WEActivate()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
675 #else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
676 # self.ted.WEDeactivate()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
677 self.drawselframe(onoff)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
678
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
679 def drawselframe(self, onoff):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
680 pass
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
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
683 class BreakpointsViewer:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
684
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
685 def __init__(self, debugger):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
686 self.debugger = debugger
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
687 self.w = W.Window((300, 250), 'Breakpoints', minsize = (200, 200))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
688 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
689 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
690 self.w.panes.gr = W.Group(None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
691 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
692 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
693 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
694
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
695 self.w.bind('<close>', self.close)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
696 self.w.bind('backspace', self.w.panes.gr.deletebutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
697
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
698 self.setup()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
699 self.w.open()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
700 self.w.panes.gr.openbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
701 self.w.panes.gr.deletebutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
702 self.curfile = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
703
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
704 def deletebuttonhit(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
705 if self.w._currentwidget == self.w.panes.files:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
706 self.del_filename()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
707 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
708 self.del_number()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
709 self.checkbuttons()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
710
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
711 def del_number(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
712 if self.curfile is None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
713 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
714 sel = self.w.panes.gr.breaks.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
715 for lineno in sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
716 self.debugger.clear_break(self.curfile, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
717
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
718 def del_filename(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
719 sel = self.w.panes.files.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
720 for filename in sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
721 self.debugger.clear_all_file_breaks(filename)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
722 self.debugger.update_allbreaks()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
723
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
724 def setup(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
725 files = self.debugger.breaks.keys()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
726 files.sort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
727 self.w.panes.files.set(files)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
728
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
729 def close(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
730 self.debugger.breaksviewer = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
731 self.debugger = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
732
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
733 def update(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
734 sel = self.w.panes.files.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
735 self.setup()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
736 self.w.panes.files.setselectedobjects(sel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
737 sel = self.w.panes.files.getselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
738 if len(sel) == 0 and self.curfile:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
739 self.w.panes.files.setselectedobjects([self.curfile])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
740 self.filehit(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
741
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
742 def select(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
743 self.w.select()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
744
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
745 def selectfile(self, file):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
746 self.w.panes.files.setselectedobjects([file])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
747 self.filehit(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
748
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
749 def openbuttonhit(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
750 self.filehit(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
751
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
752 def filehit(self, isdbl):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
753 sel = self.w.panes.files.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
754 if isdbl:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
755 for filename in sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
756 lineno = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
757 if filename == self.curfile:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
758 linesel = self.w.panes.gr.breaks.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
759 if linesel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
760 lineno = linesel[-1]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
761 elif self.w.panes.gr.breaks:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
762 lineno = self.w.panes.gr.breaks[0]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
763 editor = self.w._parentwindow.parent.openscript(filename, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
764 editor.showbreakpoints(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
765 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
766 if len(sel) == 1:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
767 file = sel[0]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
768 filebreaks = self.debugger.breaks[file][:]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
769 if self.curfile == file:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
770 linesel = self.w.panes.gr.breaks.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
771 self.w.panes.gr.breaks.set(filebreaks)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
772 if self.curfile == file:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
773 self.w.panes.gr.breaks.setselectedobjects(linesel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
774 self.curfile = file
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
775 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
776 if len(sel) <> 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
777 self.curfile = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
778 self.w.panes.gr.breaks.set([])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
779 self.checkbuttons()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
780
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
781 def linehit(self, isdbl):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
782 if isdbl:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
783 files = self.w.panes.files.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
784 if len(files) <> 1:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
785 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
786 filename = files[0]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
787 linenos = self.w.panes.gr.breaks.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
788 if not linenos:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
789 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
790 lineno = linenos[-1]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
791 editor = self.w._parentwindow.parent.openscript(filename, lineno)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
792 editor.showbreakpoints(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
793 self.checkbuttons()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
794
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
795 def checkbuttons(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
796 if self.w.panes.files.getselection():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
797 self.w.panes.gr.openbutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
798 self.w._parentwindow.setdefaultbutton(self.w.panes.gr.openbutton)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
799 if self.w._currentwidget == self.w.panes.files:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
800 if self.w.panes.files.getselection():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
801 self.w.panes.gr.deletebutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
802 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
803 self.w.panes.gr.deletebutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
804 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
805 if self.w.panes.gr.breaks.getselection():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
806 self.w.panes.gr.deletebutton.enable(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
807 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
808 self.w.panes.gr.deletebutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
809 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
810 self.w.panes.gr.openbutton.enable(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
811 self.w.panes.gr.deletebutton.enable(0)
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
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
814 class TracingMonitor(W.Widget):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
815
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
816 def __init__(self, *args, **kwargs):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
817 apply(W.Widget.__init__, (self,) + args, kwargs)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
818 self.state = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
819
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
820 def toggle(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
821 if hasattr(self, "_parentwindow") and self._parentwindow is not None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
822 self.state = self.state % 2 + 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
823 port = Qd.GetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
824 self.SetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
825 self.draw()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
826 Qd.SetPort(port)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
827
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
828 def reset(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
829 if self._parentwindow:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
830 self.state = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
831 port = Qd.GetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
832 self.SetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
833 self.draw()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
834 Qd.SetPort(port)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
835
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
836 def draw(self, visRgn = None):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
837 if self.state == 2:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
838 Qd.PaintOval(self._bounds)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
839 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
840 Qd.EraseOval(self._bounds)
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
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
843 # convenience funcs
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
844
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
845 def postmortem(exc_type, exc_value, tb):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
846 d = getdebugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
847 d.postmortem(exc_type, exc_value, tb)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
848
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
849 def start(bottomframe = None):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
850 d = getdebugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
851 d.start(bottomframe)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
852
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
853 def startfromhere():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
854 d = getdebugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
855 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
856 raise 'spam'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
857 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
858 frame = sys.exc_traceback.tb_frame.f_back
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
859 d.start(frame)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
860
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
861 def startfrombottom():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
862 d = getdebugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
863 d.start(_getbottomframe(), 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
864
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
865 def stop():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
866 d = getdebugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
867 d.stop()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
868
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
869 def cont():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
870 sys.settrace(None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
871 d = getdebugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
872 d.set_continue_without_debugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
873
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
874 def _getbottomframe():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
875 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
876 raise 'spam'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
877 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
878 pass
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
879 frame = sys.exc_traceback.tb_frame
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
880 while 1:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
881 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
882 break
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
883 frame = frame.f_back
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
884 return frame
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
885
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
886 _debugger = None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
887
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
888 def getdebugger():
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
889 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
890 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
891 global _debugger
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
892 if _debugger is None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
893 _debugger = Debugger()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
894 return _debugger