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

Skip to content

Commit 13bfbe7

Browse files
committed
Fixed PM debugging
Added different arrow-icons for running/calling/returning/exception
1 parent 5c30388 commit 13bfbe7

4 files changed

Lines changed: 871 additions & 392 deletions

File tree

Mac/Tools/twit/TwitCore.py

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313
types.StringType
1414
)
1515

16+
# XXXX Mac-specific
17+
ICON_NORMAL=512
18+
ICON_RETURN=515
19+
ICON_CALL=516
20+
ICON_ZERO=517
21+
ICON_DEAD=518
22+
1623
def Initialize():
1724
pass
1825

@@ -23,20 +30,23 @@ def __init__(self, parent):
2330
self.parent = parent
2431
self.exception_info = (None, None)
2532
self.reason = 'Not running'
33+
self.icon = ICON_NORMAL
2634
self.reset()
2735

2836
def reset(self):
2937
bdb.Bdb.reset(self)
3038
self.forget()
3139

3240
def forget(self):
41+
print 'FORGET'
3342
self.lineno = None
3443
self.stack = []
3544
self.curindex = 0
3645
self.curframe = None
3746

3847
def setup(self, f, t):
3948
self.forget()
49+
print 'SETUP', f, t
4050
self.stack, self.curindex = self.get_stack(f, t)
4151
self.curframe = self.stack[self.curindex][0]
4252

@@ -46,19 +56,23 @@ def interaction(self, frame, traceback):
4656
self.exception_info = (None, None)
4757

4858
def user_call(self, frame, argument_list):
49-
self.reason = 'Calling function'
59+
self.reason = 'Calling'
60+
self.icon = ICON_CALL
5061
self.interaction(frame, None)
5162

5263
def user_line(self, frame):
5364
self.reason = 'Stopped'
65+
self.icon = ICON_NORMAL
5466
self.interaction(frame, None)
5567

5668
def user_return(self, frame, return_value):
57-
self.reason = 'Returning from function'
69+
self.reason = 'Returning'
70+
self.icon = ICON_RETURN
5871
self.interaction(frame, None)
5972

6073
def user_exception(self, frame, (exc_type, exc_value, exc_traceback)):
6174
self.reason = 'Exception occurred'
75+
self.icon = ICON_DEAD
6276
self.exception_info = (exc_type, exc_value)
6377
self.interaction(frame, exc_traceback)
6478

@@ -71,6 +85,7 @@ def getexception(self):
7185
return tp, value
7286

7387
def getstacktrace(self):
88+
print 'DBG GETSTACKTRACE', self.stack
7489
names, locations = [], []
7590
for frame, lineno in self.stack:
7691
name = frame.f_code.co_name
@@ -89,6 +104,7 @@ def getstacktrace(self):
89104
if not modname: modname = "<unknown>"
90105

91106
locations.append("%s:%d" % (modname, lineno))
107+
print 'DBG RETURNS', names, locations
92108
return names, locations
93109

94110
def getframe(self, number):
@@ -128,11 +144,13 @@ def mi_init(self, run_args, pm_args):
128144
self.run_dialog.open()
129145
self.module_dialog = None
130146
self.initial_cmd = None
147+
self.cur_string_name = None
131148
if pm_args:
132149
while pm_args.tb_next <> None:
133150
pm_args = pm_args.tb_next
134151
self.dbg.setup(pm_args.tb_frame, pm_args)
135152
self.run_dialog.setsession_pm()
153+
self.run_dialog.update_views()
136154
elif run_args:
137155
self.run_dialog.setsession_run()
138156
self.initial_cmd = run_args
@@ -164,6 +182,12 @@ def quit_bdb(self):
164182

165183
def run(self):
166184
cmd = AskString('Statement to execute:')
185+
self.cur_string_name = '<string: "%s">'%cmd
186+
try:
187+
cmd = compile(cmd, self.cur_string_name, 'exec')
188+
except SyntaxError, arg:
189+
ShowMessage('Syntax error: %s'%`arg`)
190+
return
167191
self.initial_cmd = (cmd, None, None)
168192
self.run_dialog.setsession_run()
169193
self.exit_mainloop()
@@ -247,12 +271,19 @@ def setup_frame(self):
247271
self.cur_line = optnextline
248272
if self.cur_source == '<string>':
249273
self.cur_source = None
250-
msg = "Executing from <string>"
274+
msg = "Executing from unknown <string>"
275+
elif type(self.cur_source) == types.StringType and \
276+
self.cur_source[:8] == '<string:':
277+
msg = "Executing from "+self.cur_source
278+
self.cur_source = None
251279
print 'SOURCE', self.cur_source
252280
print 'LINE', self.cur_line
253281

254282
self.setsource(msg)
255-
self.source.setcurline(self.cur_line)
283+
if not self.cur_line:
284+
self.source.setcurline(1, ICON_ZERO)
285+
else:
286+
self.source.setcurline(self.cur_line, self.parent.dbg.icon)
256287
self.breaks_changed(self.cur_source)
257288

258289

Mac/Tools/twit/mac_widgets.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
ICONSIZE=16
1515
TEXTWIDTH=4096 # More-or-less random value
1616

17-
PIC_CURRENT=512
1817
PIC_BREAK=513
1918
picture_cache={}
2019

@@ -179,14 +178,16 @@ def __init__(self, wid, r):
179178
self.terect[0]-1, self.terect[3]-1)
180179
self.curlinerange = (self.terect[1]+self.ted.lineHeight,
181180
self.terect[3]-2*self.ted.lineHeight)
181+
self.piccurrent = 512
182182

183183
def setbreaks(self, list):
184184
self.breakpointlist = list[:]
185185
Qd.SetPort(self.wid)
186186
Win.InvalRect(self.iconrect)
187187

188-
def setcurline(self, line):
188+
def setcurline(self, line, pic=512):
189189
self.curline = line
190+
self.piccurrent = pic
190191
Qd.SetPort(self.wid)
191192
self.showline(line)
192193

@@ -224,7 +225,7 @@ def drawallicons(self):
224225
if topline <= i <= botline:
225226
self.draw1icon(i, PIC_BREAK)
226227
if self.curline <> None and topline <= self.curline <= botline:
227-
self.draw1icon(self.curline, PIC_CURRENT)
228+
self.draw1icon(self.curline, self.piccurrent)
228229

229230
def draw1icon(self, line, which):
230231
offset = self.line_index[line]

Mac/Tools/twit/mactwit_app.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
# Made available to TwitCore:
2020
AskString = EasyDialogs.AskString
21+
ShowMessage = EasyDialogs.Message
2122

2223
def SetCursor():
2324
Qd.SetCursor(_arrow)

0 commit comments

Comments
 (0)