Fixed PM debugging

Added different arrow-icons for running/calling/returning/exception
This commit is contained in:
Jack Jansen 1996-09-25 14:09:35 +00:00
parent 5c30388861
commit 13bfbe77d6
4 changed files with 871 additions and 392 deletions

View File

@ -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)

View File

@ -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]

View File

@ -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