Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5d2af63

Browse files
author
Chui Tey
committed
GvR's rpc patch
1 parent 38d5345 commit 5d2af63

7 files changed

Lines changed: 1208 additions & 94 deletions

File tree

Lib/idlelib/Debugger.py

Lines changed: 82 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,73 @@
11
import os
22
import bdb
3+
import types
34
import traceback
45
from Tkinter import *
56
from WindowList import ListedToplevel
67

78
import StackViewer
89

910

10-
class Debugger(bdb.Bdb):
11+
class Idb(bdb.Bdb):
12+
13+
def __init__(self, gui):
14+
self.gui = gui
15+
bdb.Bdb.__init__(self)
16+
17+
def user_line(self, frame):
18+
# get the currently executing function
19+
co_filename = frame.f_code.co_filename
20+
co_name = frame.f_code.co_name
21+
try:
22+
func = frame.f_locals[co_name]
23+
if getattr(func, "DebuggerStepThrough", 0):
24+
print "XXXX DEBUGGER STEPPING THROUGH"
25+
self.set_step()
26+
return
27+
except:
28+
pass
29+
if co_filename in ('rpc.py', '<string>'):
30+
self.set_step()
31+
return
32+
if co_filename.endswith('threading.py'):
33+
self.set_step()
34+
return
35+
message = self.__frame2message(frame)
36+
self.gui.interaction(message, frame)
37+
38+
def user_exception(self, frame, info):
39+
message = self.__frame2message(frame)
40+
self.gui.interaction(message, frame, info)
41+
42+
def __frame2message(self, frame):
43+
code = frame.f_code
44+
filename = code.co_filename
45+
lineno = frame.f_lineno
46+
basename = os.path.basename(filename)
47+
message = "%s:%s" % (basename, lineno)
48+
if code.co_name != "?":
49+
message = "%s: %s()" % (message, code.co_name)
50+
return message
1151

12-
interacting = 0
1352

53+
class Debugger:
54+
55+
interacting = 0
1456
vstack = vsource = vlocals = vglobals = None
1557

16-
def __init__(self, pyshell):
17-
bdb.Bdb.__init__(self)
58+
def __init__(self, pyshell, idb=None):
59+
if idb is None:
60+
idb = Idb(self)
1861
self.pyshell = pyshell
62+
self.idb = idb
1963
self.make_gui()
2064

21-
def canonic(self, filename):
22-
# Canonicalize filename -- called by Bdb
23-
return os.path.normcase(os.path.abspath(filename))
65+
def run(self, *args):
66+
try:
67+
self.interacting = 1
68+
return self.idb.run(*args)
69+
finally:
70+
self.interacting = 0
2471

2572
def close(self, event=None):
2673
if self.interacting:
@@ -31,24 +78,6 @@ def close(self, event=None):
3178
self.pyshell.close_debugger()
3279
self.top.destroy()
3380

34-
def run(self, *args):
35-
try:
36-
self.interacting = 1
37-
return apply(bdb.Bdb.run, (self,) + args)
38-
finally:
39-
self.interacting = 0
40-
41-
def user_line(self, frame):
42-
self.interaction(frame)
43-
44-
def user_return(self, frame, rv):
45-
# XXX show rv?
46-
##self.interaction(frame)
47-
pass
48-
49-
def user_exception(self, frame, info):
50-
self.interaction(frame, info)
51-
5281
def make_gui(self):
5382
pyshell = self.pyshell
5483
self.flist = pyshell.flist
@@ -128,16 +157,8 @@ def make_gui(self):
128157

129158
frame = None
130159

131-
def interaction(self, frame, info=None):
160+
def interaction(self, message, frame, info=None):
132161
self.frame = frame
133-
code = frame.f_code
134-
file = code.co_filename
135-
base = os.path.basename(file)
136-
lineno = frame.f_lineno
137-
#
138-
message = "%s:%s" % (base, lineno)
139-
if code.co_name != "?":
140-
message = "%s: %s()" % (message, code.co_name)
141162
self.status.configure(text=message)
142163
#
143164
if info:
@@ -160,7 +181,7 @@ def interaction(self, frame, info=None):
160181
#
161182
sv = self.stackviewer
162183
if sv:
163-
stack, i = self.get_stack(self.frame, tb)
184+
stack, i = self.idb.get_stack(self.frame, tb)
164185
sv.load_stack(stack, i)
165186
#
166187
self.show_variables(1)
@@ -184,32 +205,34 @@ def sync_source_line(self):
184205
frame = self.frame
185206
if not frame:
186207
return
208+
filename, lineno = self.__frame2fileline(frame)
209+
if filename[:1] + filename[-1:] != "<>" and os.path.exists(filename):
210+
self.flist.gotofileline(filename, lineno)
211+
212+
def __frame2fileline(self, frame):
187213
code = frame.f_code
188-
file = code.co_filename
214+
filename = code.co_filename
189215
lineno = frame.f_lineno
190-
if file[:1] + file[-1:] != "<>" and os.path.exists(file):
191-
edit = self.flist.open(file)
192-
if edit:
193-
edit.gotoline(lineno)
216+
return filename, lineno
194217

195218
def cont(self):
196-
self.set_continue()
219+
self.idb.set_continue()
197220
self.root.quit()
198221

199222
def step(self):
200-
self.set_step()
223+
self.idb.set_step()
201224
self.root.quit()
202225

203226
def next(self):
204-
self.set_next(self.frame)
227+
self.idb.set_next(self.frame)
205228
self.root.quit()
206229

207230
def ret(self):
208-
self.set_return(self.frame)
231+
self.idb.set_return(self.frame)
209232
self.root.quit()
210233

211234
def quit(self):
212-
self.set_quit()
235+
self.idb.set_quit()
213236
self.root.quit()
214237

215238
stackviewer = None
@@ -219,7 +242,7 @@ def show_stack(self):
219242
self.stackviewer = sv = StackViewer.StackViewer(
220243
self.fstack, self.flist, self)
221244
if self.frame:
222-
stack, i = self.get_stack(self.frame, None)
245+
stack, i = self.idb.get_stack(self.frame, None)
223246
sv.load_stack(stack, i)
224247
else:
225248
sv = self.stackviewer
@@ -233,6 +256,7 @@ def show_source(self):
233256
self.sync_source_line()
234257

235258
def show_frame(self, (frame, lineno)):
259+
# Called from OldStackViewer
236260
self.frame = frame
237261
self.show_variables()
238262

@@ -295,15 +319,15 @@ def set_breakpoint_here(self, edit):
295319
text.tag_add("BREAK", "insert linestart", "insert lineend +1char")
296320

297321
# A literal copy of Bdb.set_break() without the print statement at the end
298-
def set_break(self, filename, lineno, temporary=0, cond = None):
299-
import linecache # Import as late as possible
300-
filename = self.canonic(filename)
301-
line = linecache.getline(filename, lineno)
302-
if not line:
303-
return 'That line does not exist!'
304-
if not self.breaks.has_key(filename):
305-
self.breaks[filename] = []
306-
list = self.breaks[filename]
307-
if not lineno in list:
308-
list.append(lineno)
309-
bp = bdb.Breakpoint(filename, lineno, temporary, cond)
322+
#def set_break(self, filename, lineno, temporary=0, cond = None):
323+
# import linecache # Import as late as possible
324+
# filename = self.canonic(filename)
325+
# line = linecache.getline(filename, lineno)
326+
# if not line:
327+
# return 'That line does not exist!'
328+
# if not self.breaks.has_key(filename):
329+
# self.breaks[filename] = []
330+
# list = self.breaks[filename]
331+
# if not lineno in list:
332+
# list.append(lineno)
333+
# bp = bdb.Breakpoint(filename, lineno, temporary, cond)

0 commit comments

Comments
 (0)