mirror of https://github.com/python/cpython.git
Fixed PM debugging
Added different arrow-icons for running/calling/returning/exception
This commit is contained in:
parent
5c30388861
commit
13bfbe77d6
|
@ -13,6 +13,13 @@
|
||||||
types.StringType
|
types.StringType
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# XXXX Mac-specific
|
||||||
|
ICON_NORMAL=512
|
||||||
|
ICON_RETURN=515
|
||||||
|
ICON_CALL=516
|
||||||
|
ICON_ZERO=517
|
||||||
|
ICON_DEAD=518
|
||||||
|
|
||||||
def Initialize():
|
def Initialize():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -23,6 +30,7 @@ def __init__(self, parent):
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.exception_info = (None, None)
|
self.exception_info = (None, None)
|
||||||
self.reason = 'Not running'
|
self.reason = 'Not running'
|
||||||
|
self.icon = ICON_NORMAL
|
||||||
self.reset()
|
self.reset()
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
|
@ -30,6 +38,7 @@ def reset(self):
|
||||||
self.forget()
|
self.forget()
|
||||||
|
|
||||||
def forget(self):
|
def forget(self):
|
||||||
|
print 'FORGET'
|
||||||
self.lineno = None
|
self.lineno = None
|
||||||
self.stack = []
|
self.stack = []
|
||||||
self.curindex = 0
|
self.curindex = 0
|
||||||
|
@ -37,6 +46,7 @@ def forget(self):
|
||||||
|
|
||||||
def setup(self, f, t):
|
def setup(self, f, t):
|
||||||
self.forget()
|
self.forget()
|
||||||
|
print 'SETUP', f, t
|
||||||
self.stack, self.curindex = self.get_stack(f, t)
|
self.stack, self.curindex = self.get_stack(f, t)
|
||||||
self.curframe = self.stack[self.curindex][0]
|
self.curframe = self.stack[self.curindex][0]
|
||||||
|
|
||||||
|
@ -46,19 +56,23 @@ def interaction(self, frame, traceback):
|
||||||
self.exception_info = (None, None)
|
self.exception_info = (None, None)
|
||||||
|
|
||||||
def user_call(self, frame, argument_list):
|
def user_call(self, frame, argument_list):
|
||||||
self.reason = 'Calling function'
|
self.reason = 'Calling'
|
||||||
|
self.icon = ICON_CALL
|
||||||
self.interaction(frame, None)
|
self.interaction(frame, None)
|
||||||
|
|
||||||
def user_line(self, frame):
|
def user_line(self, frame):
|
||||||
self.reason = 'Stopped'
|
self.reason = 'Stopped'
|
||||||
|
self.icon = ICON_NORMAL
|
||||||
self.interaction(frame, None)
|
self.interaction(frame, None)
|
||||||
|
|
||||||
def user_return(self, frame, return_value):
|
def user_return(self, frame, return_value):
|
||||||
self.reason = 'Returning from function'
|
self.reason = 'Returning'
|
||||||
|
self.icon = ICON_RETURN
|
||||||
self.interaction(frame, None)
|
self.interaction(frame, None)
|
||||||
|
|
||||||
def user_exception(self, frame, (exc_type, exc_value, exc_traceback)):
|
def user_exception(self, frame, (exc_type, exc_value, exc_traceback)):
|
||||||
self.reason = 'Exception occurred'
|
self.reason = 'Exception occurred'
|
||||||
|
self.icon = ICON_DEAD
|
||||||
self.exception_info = (exc_type, exc_value)
|
self.exception_info = (exc_type, exc_value)
|
||||||
self.interaction(frame, exc_traceback)
|
self.interaction(frame, exc_traceback)
|
||||||
|
|
||||||
|
@ -71,6 +85,7 @@ def getexception(self):
|
||||||
return tp, value
|
return tp, value
|
||||||
|
|
||||||
def getstacktrace(self):
|
def getstacktrace(self):
|
||||||
|
print 'DBG GETSTACKTRACE', self.stack
|
||||||
names, locations = [], []
|
names, locations = [], []
|
||||||
for frame, lineno in self.stack:
|
for frame, lineno in self.stack:
|
||||||
name = frame.f_code.co_name
|
name = frame.f_code.co_name
|
||||||
|
@ -89,6 +104,7 @@ def getstacktrace(self):
|
||||||
if not modname: modname = "<unknown>"
|
if not modname: modname = "<unknown>"
|
||||||
|
|
||||||
locations.append("%s:%d" % (modname, lineno))
|
locations.append("%s:%d" % (modname, lineno))
|
||||||
|
print 'DBG RETURNS', names, locations
|
||||||
return names, locations
|
return names, locations
|
||||||
|
|
||||||
def getframe(self, number):
|
def getframe(self, number):
|
||||||
|
@ -128,11 +144,13 @@ def mi_init(self, run_args, pm_args):
|
||||||
self.run_dialog.open()
|
self.run_dialog.open()
|
||||||
self.module_dialog = None
|
self.module_dialog = None
|
||||||
self.initial_cmd = None
|
self.initial_cmd = None
|
||||||
|
self.cur_string_name = None
|
||||||
if pm_args:
|
if pm_args:
|
||||||
while pm_args.tb_next <> None:
|
while pm_args.tb_next <> None:
|
||||||
pm_args = pm_args.tb_next
|
pm_args = pm_args.tb_next
|
||||||
self.dbg.setup(pm_args.tb_frame, pm_args)
|
self.dbg.setup(pm_args.tb_frame, pm_args)
|
||||||
self.run_dialog.setsession_pm()
|
self.run_dialog.setsession_pm()
|
||||||
|
self.run_dialog.update_views()
|
||||||
elif run_args:
|
elif run_args:
|
||||||
self.run_dialog.setsession_run()
|
self.run_dialog.setsession_run()
|
||||||
self.initial_cmd = run_args
|
self.initial_cmd = run_args
|
||||||
|
@ -164,6 +182,12 @@ def quit_bdb(self):
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
cmd = AskString('Statement to execute:')
|
cmd = AskString('Statement to execute:')
|
||||||
|
self.cur_string_name = '<string: "%s">'%cmd
|
||||||
|
try:
|
||||||
|
cmd = compile(cmd, self.cur_string_name, 'exec')
|
||||||
|
except SyntaxError, arg:
|
||||||
|
ShowMessage('Syntax error: %s'%`arg`)
|
||||||
|
return
|
||||||
self.initial_cmd = (cmd, None, None)
|
self.initial_cmd = (cmd, None, None)
|
||||||
self.run_dialog.setsession_run()
|
self.run_dialog.setsession_run()
|
||||||
self.exit_mainloop()
|
self.exit_mainloop()
|
||||||
|
@ -247,12 +271,19 @@ def setup_frame(self):
|
||||||
self.cur_line = optnextline
|
self.cur_line = optnextline
|
||||||
if self.cur_source == '<string>':
|
if self.cur_source == '<string>':
|
||||||
self.cur_source = None
|
self.cur_source = None
|
||||||
msg = "Executing from <string>"
|
msg = "Executing from unknown <string>"
|
||||||
|
elif type(self.cur_source) == types.StringType and \
|
||||||
|
self.cur_source[:8] == '<string:':
|
||||||
|
msg = "Executing from "+self.cur_source
|
||||||
|
self.cur_source = None
|
||||||
print 'SOURCE', self.cur_source
|
print 'SOURCE', self.cur_source
|
||||||
print 'LINE', self.cur_line
|
print 'LINE', self.cur_line
|
||||||
|
|
||||||
self.setsource(msg)
|
self.setsource(msg)
|
||||||
self.source.setcurline(self.cur_line)
|
if not self.cur_line:
|
||||||
|
self.source.setcurline(1, ICON_ZERO)
|
||||||
|
else:
|
||||||
|
self.source.setcurline(self.cur_line, self.parent.dbg.icon)
|
||||||
self.breaks_changed(self.cur_source)
|
self.breaks_changed(self.cur_source)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
ICONSIZE=16
|
ICONSIZE=16
|
||||||
TEXTWIDTH=4096 # More-or-less random value
|
TEXTWIDTH=4096 # More-or-less random value
|
||||||
|
|
||||||
PIC_CURRENT=512
|
|
||||||
PIC_BREAK=513
|
PIC_BREAK=513
|
||||||
picture_cache={}
|
picture_cache={}
|
||||||
|
|
||||||
|
@ -179,14 +178,16 @@ def __init__(self, wid, r):
|
||||||
self.terect[0]-1, self.terect[3]-1)
|
self.terect[0]-1, self.terect[3]-1)
|
||||||
self.curlinerange = (self.terect[1]+self.ted.lineHeight,
|
self.curlinerange = (self.terect[1]+self.ted.lineHeight,
|
||||||
self.terect[3]-2*self.ted.lineHeight)
|
self.terect[3]-2*self.ted.lineHeight)
|
||||||
|
self.piccurrent = 512
|
||||||
|
|
||||||
def setbreaks(self, list):
|
def setbreaks(self, list):
|
||||||
self.breakpointlist = list[:]
|
self.breakpointlist = list[:]
|
||||||
Qd.SetPort(self.wid)
|
Qd.SetPort(self.wid)
|
||||||
Win.InvalRect(self.iconrect)
|
Win.InvalRect(self.iconrect)
|
||||||
|
|
||||||
def setcurline(self, line):
|
def setcurline(self, line, pic=512):
|
||||||
self.curline = line
|
self.curline = line
|
||||||
|
self.piccurrent = pic
|
||||||
Qd.SetPort(self.wid)
|
Qd.SetPort(self.wid)
|
||||||
self.showline(line)
|
self.showline(line)
|
||||||
|
|
||||||
|
@ -224,7 +225,7 @@ def drawallicons(self):
|
||||||
if topline <= i <= botline:
|
if topline <= i <= botline:
|
||||||
self.draw1icon(i, PIC_BREAK)
|
self.draw1icon(i, PIC_BREAK)
|
||||||
if self.curline <> None and topline <= self.curline <= botline:
|
if self.curline <> None and topline <= self.curline <= botline:
|
||||||
self.draw1icon(self.curline, PIC_CURRENT)
|
self.draw1icon(self.curline, self.piccurrent)
|
||||||
|
|
||||||
def draw1icon(self, line, which):
|
def draw1icon(self, line, which):
|
||||||
offset = self.line_index[line]
|
offset = self.line_index[line]
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
# Made available to TwitCore:
|
# Made available to TwitCore:
|
||||||
AskString = EasyDialogs.AskString
|
AskString = EasyDialogs.AskString
|
||||||
|
ShowMessage = EasyDialogs.Message
|
||||||
|
|
||||||
def SetCursor():
|
def SetCursor():
|
||||||
Qd.SetCursor(_arrow)
|
Qd.SetCursor(_arrow)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue