blob: 34052014df7c1f2c6e0df37548631910270cfc7a [file] [log] [blame]
Guido van Rossumf06ee5f1996-11-27 19:52:01 +00001#! /usr/bin/env python
Guido van Rossumf17361d1996-07-30 16:28:13 +00002
Guido van Rossum4b8c6ea2000-02-04 15:39:30 +00003"""A Python debugger."""
Guido van Rossum92df0c61992-01-14 18:30:15 +00004
Guido van Rossum23efba41992-01-27 16:58:47 +00005# (See pdb.doc for documentation.)
Guido van Rossum921c8241992-01-10 14:54:42 +00006
Guido van Rossum921c8241992-01-10 14:54:42 +00007import sys
8import linecache
Guido van Rossum23efba41992-01-27 16:58:47 +00009import cmd
10import bdb
Guido van Rossumef1b41b2002-09-10 21:57:14 +000011from repr import Repr
Guido van Rossumb5699c71998-07-20 23:13:54 +000012import os
Barry Warsaw2bee8fe1999-09-09 16:32:41 +000013import re
Barry Warsaw210bd202002-11-05 22:40:20 +000014import pprint
Johannes Gijsbers25b38c82004-10-12 18:12:09 +000015import traceback
Guido van Rossumef1b41b2002-09-10 21:57:14 +000016# Create a custom safe Repr instance and increase its maxstring.
17# The default of 30 truncates error messages too easily.
18_repr = Repr()
19_repr.maxstring = 200
20_saferepr = _repr.repr
21
Skip Montanaro352674d2001-02-07 23:14:30 +000022__all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace",
23 "post_mortem", "help"]
24
Barry Warsaw2bee8fe1999-09-09 16:32:41 +000025def find_function(funcname, filename):
Tim Peters2344fae2001-01-15 00:50:52 +000026 cre = re.compile(r'def\s+%s\s*[(]' % funcname)
27 try:
28 fp = open(filename)
29 except IOError:
30 return None
31 # consumer of this info expects the first line to be 1
32 lineno = 1
33 answer = None
34 while 1:
35 line = fp.readline()
36 if line == '':
37 break
38 if cre.match(line):
39 answer = funcname, filename, lineno
40 break
41 lineno = lineno + 1
42 fp.close()
43 return answer
Guido van Rossum921c8241992-01-10 14:54:42 +000044
45
Guido van Rossuma558e371994-11-10 22:27:35 +000046# Interaction prompt line will separate file and call info from code
47# text using value of line_prefix string. A newline and arrow may
48# be to your liking. You can set it once pdb is imported using the
49# command "pdb.line_prefix = '\n% '".
Tim Peters2344fae2001-01-15 00:50:52 +000050# line_prefix = ': ' # Use this to get the old situation back
51line_prefix = '\n-> ' # Probably a better default
Guido van Rossuma558e371994-11-10 22:27:35 +000052
Guido van Rossum23efba41992-01-27 16:58:47 +000053class Pdb(bdb.Bdb, cmd.Cmd):
Guido van Rossum2424f851998-09-11 22:50:09 +000054
Georg Brandl19564802006-05-10 17:13:20 +000055 def __init__(self, completekey='tab', stdin=None, stdout=None):
Tim Peters2344fae2001-01-15 00:50:52 +000056 bdb.Bdb.__init__(self)
Georg Brandl19564802006-05-10 17:13:20 +000057 cmd.Cmd.__init__(self, completekey, stdin, stdout)
58 if stdout:
59 self.use_rawinput = 0
Tim Peters2344fae2001-01-15 00:50:52 +000060 self.prompt = '(Pdb) '
61 self.aliases = {}
Johannes Gijsbers25b38c82004-10-12 18:12:09 +000062 self.mainpyfile = ''
63 self._wait_for_mainpyfile = 0
Tim Peters2344fae2001-01-15 00:50:52 +000064 # Try to load readline if it exists
65 try:
66 import readline
67 except ImportError:
68 pass
Guido van Rossum2424f851998-09-11 22:50:09 +000069
Tim Peters2344fae2001-01-15 00:50:52 +000070 # Read $HOME/.pdbrc and ./.pdbrc
71 self.rcLines = []
Raymond Hettinger54f02222002-06-01 14:18:47 +000072 if 'HOME' in os.environ:
Tim Peters2344fae2001-01-15 00:50:52 +000073 envHome = os.environ['HOME']
74 try:
75 rcFile = open(os.path.join(envHome, ".pdbrc"))
76 except IOError:
77 pass
78 else:
79 for line in rcFile.readlines():
80 self.rcLines.append(line)
81 rcFile.close()
82 try:
83 rcFile = open(".pdbrc")
84 except IOError:
85 pass
86 else:
87 for line in rcFile.readlines():
88 self.rcLines.append(line)
89 rcFile.close()
Guido van Rossum23efba41992-01-27 16:58:47 +000090
Martin v. Löwisbd30f522006-04-17 17:08:37 +000091 self.commands = {} # associates a command list to breakpoint numbers
92 self.commands_doprompt = {} # for each bp num, tells if the prompt must be disp. after execing the cmd list
93 self.commands_silent = {} # for each bp num, tells if the stack trace must be disp. after execing the cmd list
94 self.commands_defining = False # True while in the process of defining a command list
95 self.commands_bnum = None # The breakpoint number for which we are defining a list
96
Tim Peters2344fae2001-01-15 00:50:52 +000097 def reset(self):
98 bdb.Bdb.reset(self)
99 self.forget()
Guido van Rossum23efba41992-01-27 16:58:47 +0000100
Tim Peters2344fae2001-01-15 00:50:52 +0000101 def forget(self):
102 self.lineno = None
103 self.stack = []
104 self.curindex = 0
105 self.curframe = None
Guido van Rossum2424f851998-09-11 22:50:09 +0000106
Tim Peters2344fae2001-01-15 00:50:52 +0000107 def setup(self, f, t):
108 self.forget()
109 self.stack, self.curindex = self.get_stack(f, t)
110 self.curframe = self.stack[self.curindex][0]
111 self.execRcLines()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000112
Tim Peters2344fae2001-01-15 00:50:52 +0000113 # Can be executed earlier than 'setup' if desired
114 def execRcLines(self):
115 if self.rcLines:
116 # Make local copy because of recursion
117 rcLines = self.rcLines
118 # executed only once
119 self.rcLines = []
120 for line in rcLines:
121 line = line[:-1]
Guido van Rossum08454592002-07-12 13:10:53 +0000122 if len(line) > 0 and line[0] != '#':
123 self.onecmd(line)
Guido van Rossum2424f851998-09-11 22:50:09 +0000124
Tim Peters280488b2002-08-23 18:19:30 +0000125 # Override Bdb methods
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000126
127 def user_call(self, frame, argument_list):
128 """This method is called when there is the remote possibility
129 that we ever need to stop in this function."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000130 if self._wait_for_mainpyfile:
131 return
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000132 if self.stop_here(frame):
Georg Brandl19564802006-05-10 17:13:20 +0000133 print >>self.stdout, '--Call--'
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000134 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000135
Tim Peters2344fae2001-01-15 00:50:52 +0000136 def user_line(self, frame):
137 """This function is called when we stop or break at this line."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000138 if self._wait_for_mainpyfile:
139 if (self.mainpyfile != self.canonic(frame.f_code.co_filename)
140 or frame.f_lineno<= 0):
141 return
142 self._wait_for_mainpyfile = 0
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000143 if self.bp_commands(frame):
144 self.interaction(frame, None)
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000145
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000146 def bp_commands(self,frame):
147 """ Call every command that was set for the current active breakpoint (if there is one)
148 Returns True if the normal interaction function must be called, False otherwise """
149 #self.currentbp is set in bdb.py in bdb.break_here if a breakpoint was hit
150 if getattr(self,"currentbp",False) and self.currentbp in self.commands:
151 currentbp = self.currentbp
152 self.currentbp = 0
153 lastcmd_back = self.lastcmd
154 self.setup(frame, None)
155 for line in self.commands[currentbp]:
156 self.onecmd(line)
157 self.lastcmd = lastcmd_back
158 if not self.commands_silent[currentbp]:
159 self.print_stack_entry(self.stack[self.curindex])
160 if self.commands_doprompt[currentbp]:
161 self.cmdloop()
162 self.forget()
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000163 return
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000164 return 1
Guido van Rossum9e1ee971997-07-11 13:43:53 +0000165
Tim Peters2344fae2001-01-15 00:50:52 +0000166 def user_return(self, frame, return_value):
167 """This function is called when a return trap is set here."""
168 frame.f_locals['__return__'] = return_value
Georg Brandl19564802006-05-10 17:13:20 +0000169 print >>self.stdout, '--Return--'
Tim Peters2344fae2001-01-15 00:50:52 +0000170 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000171
Tim Peters2344fae2001-01-15 00:50:52 +0000172 def user_exception(self, frame, (exc_type, exc_value, exc_traceback)):
173 """This function is called if an exception occurs,
174 but only if we are to stop at or just below this level."""
175 frame.f_locals['__exception__'] = exc_type, exc_value
176 if type(exc_type) == type(''):
177 exc_type_name = exc_type
178 else: exc_type_name = exc_type.__name__
Georg Brandl19564802006-05-10 17:13:20 +0000179 print >>self.stdout, exc_type_name + ':', _saferepr(exc_value)
Tim Peters2344fae2001-01-15 00:50:52 +0000180 self.interaction(frame, exc_traceback)
Guido van Rossum2424f851998-09-11 22:50:09 +0000181
Tim Peters2344fae2001-01-15 00:50:52 +0000182 # General interaction function
183
184 def interaction(self, frame, traceback):
185 self.setup(frame, traceback)
186 self.print_stack_entry(self.stack[self.curindex])
187 self.cmdloop()
188 self.forget()
189
190 def default(self, line):
191 if line[:1] == '!': line = line[1:]
192 locals = self.curframe.f_locals
193 globals = self.curframe.f_globals
194 try:
195 code = compile(line + '\n', '<stdin>', 'single')
196 exec code in globals, locals
197 except:
198 t, v = sys.exc_info()[:2]
199 if type(t) == type(''):
200 exc_type_name = t
201 else: exc_type_name = t.__name__
Georg Brandl19564802006-05-10 17:13:20 +0000202 print >>self.stdout, '***', exc_type_name + ':', v
Tim Peters2344fae2001-01-15 00:50:52 +0000203
204 def precmd(self, line):
205 """Handle alias expansion and ';;' separator."""
Guido van Rossum08454592002-07-12 13:10:53 +0000206 if not line.strip():
Tim Peters2344fae2001-01-15 00:50:52 +0000207 return line
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000208 args = line.split()
Raymond Hettinger54f02222002-06-01 14:18:47 +0000209 while args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000210 line = self.aliases[args[0]]
211 ii = 1
212 for tmpArg in args[1:]:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000213 line = line.replace("%" + str(ii),
Tim Peters2344fae2001-01-15 00:50:52 +0000214 tmpArg)
215 ii = ii + 1
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000216 line = line.replace("%*", ' '.join(args[1:]))
217 args = line.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000218 # split into ';;' separated commands
219 # unless it's an alias command
220 if args[0] != 'alias':
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000221 marker = line.find(';;')
Tim Peters2344fae2001-01-15 00:50:52 +0000222 if marker >= 0:
223 # queue up everything after marker
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000224 next = line[marker+2:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000225 self.cmdqueue.append(next)
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000226 line = line[:marker].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000227 return line
228
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000229 def onecmd(self, line):
230 """Interpret the argument as though it had been typed in response
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000231 to the prompt.
232
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000233 Checks wether this line is typed in the normal prompt or in a breakpoint command list definition
234 """
235 if not self.commands_defining:
236 return cmd.Cmd.onecmd(self, line)
237 else:
238 return self.handle_command_def(line)
239
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000240 def handle_command_def(self,line):
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000241 """ Handles one command line during command list definition. """
242 cmd, arg, line = self.parseline(line)
243 if cmd == 'silent':
244 self.commands_silent[self.commands_bnum] = True
245 return # continue to handle other cmd def in the cmd list
246 elif cmd == 'end':
247 self.cmdqueue = []
248 return 1 # end of cmd list
249 cmdlist = self.commands[self.commands_bnum]
250 if (arg):
251 cmdlist.append(cmd+' '+arg)
252 else:
253 cmdlist.append(cmd)
254 # Determine if we must stop
255 try:
256 func = getattr(self, 'do_' + cmd)
257 except AttributeError:
258 func = self.default
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000259 if func.func_name in self.commands_resuming : # one of the resuming commands.
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000260 self.commands_doprompt[self.commands_bnum] = False
261 self.cmdqueue = []
262 return 1
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000263 return
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000264
Tim Peters2344fae2001-01-15 00:50:52 +0000265 # Command definitions, called by cmdloop()
266 # The argument is the remaining string on the command line
267 # Return true to exit from the command loop
268
269 do_h = cmd.Cmd.do_help
270
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000271 def do_commands(self, arg):
272 """Defines a list of commands associated to a breakpoint
273 Those commands will be executed whenever the breakpoint causes the program to stop execution."""
274 if not arg:
275 bnum = len(bdb.Breakpoint.bpbynumber)-1
276 else:
277 try:
278 bnum = int(arg)
279 except:
Georg Brandl19564802006-05-10 17:13:20 +0000280 print >>self.stdout, "Usage : commands [bnum]\n ...\n end"
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000281 return
282 self.commands_bnum = bnum
283 self.commands[bnum] = []
284 self.commands_doprompt[bnum] = True
285 self.commands_silent[bnum] = False
286 prompt_back = self.prompt
287 self.prompt = '(com) '
288 self.commands_defining = True
289 self.cmdloop()
290 self.commands_defining = False
291 self.prompt = prompt_back
292
Tim Peters2344fae2001-01-15 00:50:52 +0000293 def do_break(self, arg, temporary = 0):
294 # break [ ([filename:]lineno | function) [, "condition"] ]
295 if not arg:
296 if self.breaks: # There's at least one
Georg Brandl19564802006-05-10 17:13:20 +0000297 print >>self.stdout, "Num Type Disp Enb Where"
Tim Peters2344fae2001-01-15 00:50:52 +0000298 for bp in bdb.Breakpoint.bpbynumber:
299 if bp:
Georg Brandl19564802006-05-10 17:13:20 +0000300 bp.bpprint(self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000301 return
302 # parse arguments; comma has lowest precedence
303 # and cannot occur in filename
304 filename = None
305 lineno = None
306 cond = None
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000307 comma = arg.find(',')
Tim Peters2344fae2001-01-15 00:50:52 +0000308 if comma > 0:
309 # parse stuff after comma: "condition"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000310 cond = arg[comma+1:].lstrip()
311 arg = arg[:comma].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000312 # parse stuff before comma: [filename:]lineno | function
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000313 colon = arg.rfind(':')
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000314 funcname = None
Tim Peters2344fae2001-01-15 00:50:52 +0000315 if colon >= 0:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000316 filename = arg[:colon].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000317 f = self.lookupmodule(filename)
318 if not f:
Georg Brandl19564802006-05-10 17:13:20 +0000319 print >>self.stdout, '*** ', repr(filename),
320 print >>self.stdout, 'not found from sys.path'
Tim Peters2344fae2001-01-15 00:50:52 +0000321 return
322 else:
323 filename = f
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000324 arg = arg[colon+1:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000325 try:
326 lineno = int(arg)
327 except ValueError, msg:
Georg Brandl19564802006-05-10 17:13:20 +0000328 print >>self.stdout, '*** Bad lineno:', arg
Tim Peters2344fae2001-01-15 00:50:52 +0000329 return
330 else:
331 # no colon; can be lineno or function
332 try:
333 lineno = int(arg)
334 except ValueError:
335 try:
336 func = eval(arg,
337 self.curframe.f_globals,
338 self.curframe.f_locals)
339 except:
340 func = arg
341 try:
342 if hasattr(func, 'im_func'):
343 func = func.im_func
344 code = func.func_code
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000345 #use co_name to identify the bkpt (function names
346 #could be aliased, but co_name is invariant)
347 funcname = code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000348 lineno = code.co_firstlineno
349 filename = code.co_filename
350 except:
351 # last thing to try
352 (ok, filename, ln) = self.lineinfo(arg)
353 if not ok:
Georg Brandl19564802006-05-10 17:13:20 +0000354 print >>self.stdout, '*** The specified object',
355 print >>self.stdout, repr(arg),
356 print >>self.stdout, 'is not a function'
357 print >>self.stdout, 'or was not found along sys.path.'
Tim Peters2344fae2001-01-15 00:50:52 +0000358 return
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000359 funcname = ok # ok contains a function name
Tim Peters2344fae2001-01-15 00:50:52 +0000360 lineno = int(ln)
361 if not filename:
362 filename = self.defaultFile()
363 # Check for reasonable breakpoint
364 line = self.checkline(filename, lineno)
365 if line:
366 # now set the break point
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000367 err = self.set_break(filename, line, temporary, cond, funcname)
Georg Brandl19564802006-05-10 17:13:20 +0000368 if err: print >>self.stdout, '***', err
Tim Peters2344fae2001-01-15 00:50:52 +0000369 else:
370 bp = self.get_breaks(filename, line)[-1]
Georg Brandl19564802006-05-10 17:13:20 +0000371 print >>self.stdout, "Breakpoint %d at %s:%d" % (bp.number,
372 bp.file,
373 bp.line)
Tim Peters2344fae2001-01-15 00:50:52 +0000374
375 # To be overridden in derived debuggers
376 def defaultFile(self):
377 """Produce a reasonable default."""
378 filename = self.curframe.f_code.co_filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000379 if filename == '<string>' and self.mainpyfile:
380 filename = self.mainpyfile
Tim Peters2344fae2001-01-15 00:50:52 +0000381 return filename
382
383 do_b = do_break
384
385 def do_tbreak(self, arg):
386 self.do_break(arg, 1)
387
388 def lineinfo(self, identifier):
389 failed = (None, None, None)
390 # Input is identifier, may be in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000391 idstring = identifier.split("'")
Tim Peters2344fae2001-01-15 00:50:52 +0000392 if len(idstring) == 1:
393 # not in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000394 id = idstring[0].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000395 elif len(idstring) == 3:
396 # quoted
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000397 id = idstring[1].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000398 else:
399 return failed
400 if id == '': return failed
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000401 parts = id.split('.')
Tim Peters2344fae2001-01-15 00:50:52 +0000402 # Protection for derived debuggers
403 if parts[0] == 'self':
404 del parts[0]
405 if len(parts) == 0:
406 return failed
407 # Best first guess at file to look at
408 fname = self.defaultFile()
409 if len(parts) == 1:
410 item = parts[0]
411 else:
412 # More than one part.
413 # First is module, second is method/class
414 f = self.lookupmodule(parts[0])
415 if f:
416 fname = f
417 item = parts[1]
418 answer = find_function(item, fname)
419 return answer or failed
420
421 def checkline(self, filename, lineno):
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000422 """Check whether specified line seems to be executable.
Tim Peters2344fae2001-01-15 00:50:52 +0000423
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000424 Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank
425 line or EOF). Warning: testing is not comprehensive.
426 """
Tim Peters2344fae2001-01-15 00:50:52 +0000427 line = linecache.getline(filename, lineno)
428 if not line:
Georg Brandl19564802006-05-10 17:13:20 +0000429 print >>self.stdout, 'End of file'
Tim Peters2344fae2001-01-15 00:50:52 +0000430 return 0
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000431 line = line.strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000432 # Don't allow setting breakpoint at a blank line
Guido van Rossum08454592002-07-12 13:10:53 +0000433 if (not line or (line[0] == '#') or
434 (line[:3] == '"""') or line[:3] == "'''"):
Georg Brandl19564802006-05-10 17:13:20 +0000435 print >>self.stdout, '*** Blank or comment'
Tim Peters2344fae2001-01-15 00:50:52 +0000436 return 0
Tim Peters2344fae2001-01-15 00:50:52 +0000437 return lineno
438
439 def do_enable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000440 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000441 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000442 try:
443 i = int(i)
444 except ValueError:
Georg Brandl19564802006-05-10 17:13:20 +0000445 print >>self.stdout, 'Breakpoint index %r is not a number' % i
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000446 continue
447
448 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Georg Brandl19564802006-05-10 17:13:20 +0000449 print >>self.stdout, 'No breakpoint numbered', i
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000450 continue
451
452 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000453 if bp:
454 bp.enable()
455
456 def do_disable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000457 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000458 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000459 try:
460 i = int(i)
461 except ValueError:
Georg Brandl19564802006-05-10 17:13:20 +0000462 print >>self.stdout, 'Breakpoint index %r is not a number' % i
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000463 continue
Tim Petersf545baa2003-06-15 23:26:30 +0000464
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000465 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Georg Brandl19564802006-05-10 17:13:20 +0000466 print >>self.stdout, 'No breakpoint numbered', i
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000467 continue
468
469 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000470 if bp:
471 bp.disable()
472
473 def do_condition(self, arg):
474 # arg is breakpoint number and condition
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000475 args = arg.split(' ', 1)
476 bpnum = int(args[0].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000477 try:
478 cond = args[1]
479 except:
480 cond = None
481 bp = bdb.Breakpoint.bpbynumber[bpnum]
482 if bp:
483 bp.cond = cond
484 if not cond:
Georg Brandl19564802006-05-10 17:13:20 +0000485 print >>self.stdout, 'Breakpoint', bpnum,
486 print >>self.stdout, 'is now unconditional.'
Tim Peters2344fae2001-01-15 00:50:52 +0000487
488 def do_ignore(self,arg):
489 """arg is bp number followed by ignore count."""
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000490 args = arg.split()
491 bpnum = int(args[0].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000492 try:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000493 count = int(args[1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000494 except:
495 count = 0
496 bp = bdb.Breakpoint.bpbynumber[bpnum]
497 if bp:
498 bp.ignore = count
Guido van Rossum08454592002-07-12 13:10:53 +0000499 if count > 0:
Tim Peters2344fae2001-01-15 00:50:52 +0000500 reply = 'Will ignore next '
Guido van Rossum08454592002-07-12 13:10:53 +0000501 if count > 1:
Tim Peters2344fae2001-01-15 00:50:52 +0000502 reply = reply + '%d crossings' % count
503 else:
504 reply = reply + '1 crossing'
Georg Brandl19564802006-05-10 17:13:20 +0000505 print >>self.stdout, reply + ' of breakpoint %d.' % bpnum
Tim Peters2344fae2001-01-15 00:50:52 +0000506 else:
Georg Brandl19564802006-05-10 17:13:20 +0000507 print >>self.stdout, 'Will stop next time breakpoint',
508 print >>self.stdout, bpnum, 'is reached.'
Tim Peters2344fae2001-01-15 00:50:52 +0000509
510 def do_clear(self, arg):
511 """Three possibilities, tried in this order:
512 clear -> clear all breaks, ask for confirmation
513 clear file:lineno -> clear all breaks at file:lineno
514 clear bpno bpno ... -> clear breakpoints by number"""
515 if not arg:
516 try:
517 reply = raw_input('Clear all breaks? ')
518 except EOFError:
519 reply = 'no'
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000520 reply = reply.strip().lower()
Tim Peters2344fae2001-01-15 00:50:52 +0000521 if reply in ('y', 'yes'):
522 self.clear_all_breaks()
523 return
524 if ':' in arg:
525 # Make sure it works for "clear C:\foo\bar.py:12"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000526 i = arg.rfind(':')
Tim Peters2344fae2001-01-15 00:50:52 +0000527 filename = arg[:i]
528 arg = arg[i+1:]
529 try:
530 lineno = int(arg)
Georg Brandl23d9d452006-05-03 18:12:33 +0000531 except ValueError:
Tim Peters2344fae2001-01-15 00:50:52 +0000532 err = "Invalid line number (%s)" % arg
533 else:
534 err = self.clear_break(filename, lineno)
Georg Brandl19564802006-05-10 17:13:20 +0000535 if err: print >>self.stdout, '***', err
Tim Peters2344fae2001-01-15 00:50:52 +0000536 return
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000537 numberlist = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000538 for i in numberlist:
Georg Brandl23d9d452006-05-03 18:12:33 +0000539 try:
540 i = int(i)
541 except ValueError:
Georg Brandl19564802006-05-10 17:13:20 +0000542 print >>self.stdout, 'Breakpoint index %r is not a number' % i
Georg Brandl23d9d452006-05-03 18:12:33 +0000543 continue
544
Georg Brandl6d2b3462005-08-24 07:36:17 +0000545 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Georg Brandl19564802006-05-10 17:13:20 +0000546 print >>self.stdout, 'No breakpoint numbered', i
Georg Brandl6d2b3462005-08-24 07:36:17 +0000547 continue
Tim Peters2344fae2001-01-15 00:50:52 +0000548 err = self.clear_bpbynumber(i)
549 if err:
Georg Brandl19564802006-05-10 17:13:20 +0000550 print >>self.stdout, '***', err
Tim Peters2344fae2001-01-15 00:50:52 +0000551 else:
Georg Brandl19564802006-05-10 17:13:20 +0000552 print >>self.stdout, 'Deleted breakpoint', i
Tim Peters2344fae2001-01-15 00:50:52 +0000553 do_cl = do_clear # 'c' is already an abbreviation for 'continue'
554
555 def do_where(self, arg):
556 self.print_stack_trace()
557 do_w = do_where
Guido van Rossum6bd68352001-01-20 17:57:37 +0000558 do_bt = do_where
Tim Peters2344fae2001-01-15 00:50:52 +0000559
560 def do_up(self, arg):
561 if self.curindex == 0:
Georg Brandl19564802006-05-10 17:13:20 +0000562 print >>self.stdout, '*** Oldest frame'
Tim Peters2344fae2001-01-15 00:50:52 +0000563 else:
564 self.curindex = self.curindex - 1
565 self.curframe = self.stack[self.curindex][0]
566 self.print_stack_entry(self.stack[self.curindex])
567 self.lineno = None
568 do_u = do_up
569
570 def do_down(self, arg):
571 if self.curindex + 1 == len(self.stack):
Georg Brandl19564802006-05-10 17:13:20 +0000572 print >>self.stdout, '*** Newest frame'
Tim Peters2344fae2001-01-15 00:50:52 +0000573 else:
574 self.curindex = self.curindex + 1
575 self.curframe = self.stack[self.curindex][0]
576 self.print_stack_entry(self.stack[self.curindex])
577 self.lineno = None
578 do_d = do_down
579
580 def do_step(self, arg):
581 self.set_step()
582 return 1
583 do_s = do_step
584
585 def do_next(self, arg):
586 self.set_next(self.curframe)
587 return 1
588 do_n = do_next
589
590 def do_return(self, arg):
591 self.set_return(self.curframe)
592 return 1
593 do_r = do_return
594
595 def do_continue(self, arg):
596 self.set_continue()
597 return 1
598 do_c = do_cont = do_continue
599
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000600 def do_jump(self, arg):
601 if self.curindex + 1 != len(self.stack):
Georg Brandl19564802006-05-10 17:13:20 +0000602 print >>self.stdout, "*** You can only jump within the bottom frame"
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000603 return
604 try:
605 arg = int(arg)
606 except ValueError:
Georg Brandl19564802006-05-10 17:13:20 +0000607 print >>self.stdout, "*** The 'jump' command requires a line number."
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000608 else:
609 try:
610 # Do the jump, fix up our copy of the stack, and display the
611 # new position
612 self.curframe.f_lineno = arg
613 self.stack[self.curindex] = self.stack[self.curindex][0], arg
614 self.print_stack_entry(self.stack[self.curindex])
615 except ValueError, e:
Georg Brandl19564802006-05-10 17:13:20 +0000616 print >>self.stdout, '*** Jump failed:', e
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000617 do_j = do_jump
618
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000619 def do_debug(self, arg):
620 sys.settrace(None)
621 globals = self.curframe.f_globals
622 locals = self.curframe.f_locals
Guido van Rossumed538d82003-04-09 19:36:34 +0000623 p = Pdb()
624 p.prompt = "(%s) " % self.prompt.strip()
Georg Brandl19564802006-05-10 17:13:20 +0000625 print >>self.stdout, "ENTERING RECURSIVE DEBUGGER"
Guido van Rossumed538d82003-04-09 19:36:34 +0000626 sys.call_tracing(p.run, (arg, globals, locals))
Georg Brandl19564802006-05-10 17:13:20 +0000627 print >>self.stdout, "LEAVING RECURSIVE DEBUGGER"
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000628 sys.settrace(self.trace_dispatch)
629 self.lastcmd = p.lastcmd
630
Tim Peters2344fae2001-01-15 00:50:52 +0000631 def do_quit(self, arg):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000632 self._user_requested_quit = 1
Tim Peters2344fae2001-01-15 00:50:52 +0000633 self.set_quit()
634 return 1
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000635
Tim Peters2344fae2001-01-15 00:50:52 +0000636 do_q = do_quit
Guido van Rossumd1c08f32002-04-15 00:48:24 +0000637 do_exit = do_quit
Tim Peters2344fae2001-01-15 00:50:52 +0000638
Guido van Rossumeef26072003-01-13 21:13:55 +0000639 def do_EOF(self, arg):
Georg Brandl19564802006-05-10 17:13:20 +0000640 print >>self.stdout
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000641 self._user_requested_quit = 1
Guido van Rossumeef26072003-01-13 21:13:55 +0000642 self.set_quit()
643 return 1
644
Tim Peters2344fae2001-01-15 00:50:52 +0000645 def do_args(self, arg):
646 f = self.curframe
647 co = f.f_code
648 dict = f.f_locals
649 n = co.co_argcount
650 if co.co_flags & 4: n = n+1
651 if co.co_flags & 8: n = n+1
652 for i in range(n):
653 name = co.co_varnames[i]
Georg Brandl19564802006-05-10 17:13:20 +0000654 print >>self.stdout, name, '=',
655 if name in dict: print >>self.stdout, dict[name]
656 else: print >>self.stdout, "*** undefined ***"
Tim Peters2344fae2001-01-15 00:50:52 +0000657 do_a = do_args
Guido van Rossum2424f851998-09-11 22:50:09 +0000658
Tim Peters2344fae2001-01-15 00:50:52 +0000659 def do_retval(self, arg):
Raymond Hettinger54f02222002-06-01 14:18:47 +0000660 if '__return__' in self.curframe.f_locals:
Georg Brandl19564802006-05-10 17:13:20 +0000661 print >>self.stdout, self.curframe.f_locals['__return__']
Tim Peters2344fae2001-01-15 00:50:52 +0000662 else:
Georg Brandl19564802006-05-10 17:13:20 +0000663 print >>self.stdout, '*** Not yet returned!'
Tim Peters2344fae2001-01-15 00:50:52 +0000664 do_rv = do_retval
Guido van Rossum2424f851998-09-11 22:50:09 +0000665
Barry Warsaw210bd202002-11-05 22:40:20 +0000666 def _getval(self, arg):
Tim Peters2344fae2001-01-15 00:50:52 +0000667 try:
Barry Warsaw210bd202002-11-05 22:40:20 +0000668 return eval(arg, self.curframe.f_globals,
669 self.curframe.f_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000670 except:
671 t, v = sys.exc_info()[:2]
Barry Warsaw210bd202002-11-05 22:40:20 +0000672 if isinstance(t, str):
Tim Peters2344fae2001-01-15 00:50:52 +0000673 exc_type_name = t
674 else: exc_type_name = t.__name__
Georg Brandl19564802006-05-10 17:13:20 +0000675 print >>self.stdout, '***', exc_type_name + ':', repr(v)
Barry Warsaw210bd202002-11-05 22:40:20 +0000676 raise
Guido van Rossum2424f851998-09-11 22:50:09 +0000677
Barry Warsaw210bd202002-11-05 22:40:20 +0000678 def do_p(self, arg):
679 try:
Georg Brandl19564802006-05-10 17:13:20 +0000680 print >>self.stdout, repr(self._getval(arg))
Barry Warsaw210bd202002-11-05 22:40:20 +0000681 except:
682 pass
683
684 def do_pp(self, arg):
685 try:
Georg Brandl19564802006-05-10 17:13:20 +0000686 pprint.pprint(self._getval(arg), self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +0000687 except:
688 pass
Guido van Rossum2424f851998-09-11 22:50:09 +0000689
Tim Peters2344fae2001-01-15 00:50:52 +0000690 def do_list(self, arg):
691 self.lastcmd = 'list'
692 last = None
693 if arg:
694 try:
695 x = eval(arg, {}, {})
696 if type(x) == type(()):
697 first, last = x
698 first = int(first)
699 last = int(last)
700 if last < first:
701 # Assume it's a count
702 last = first + last
703 else:
704 first = max(1, int(x) - 5)
705 except:
Georg Brandl19564802006-05-10 17:13:20 +0000706 print >>self.stdout, '*** Error in argument:', repr(arg)
Tim Peters2344fae2001-01-15 00:50:52 +0000707 return
708 elif self.lineno is None:
709 first = max(1, self.curframe.f_lineno - 5)
710 else:
711 first = self.lineno + 1
712 if last is None:
713 last = first + 10
714 filename = self.curframe.f_code.co_filename
715 breaklist = self.get_file_breaks(filename)
716 try:
717 for lineno in range(first, last+1):
718 line = linecache.getline(filename, lineno)
719 if not line:
Georg Brandl19564802006-05-10 17:13:20 +0000720 print >>self.stdout, '[EOF]'
Tim Peters2344fae2001-01-15 00:50:52 +0000721 break
722 else:
Walter Dörwald70a6b492004-02-12 17:35:32 +0000723 s = repr(lineno).rjust(3)
Tim Peters2344fae2001-01-15 00:50:52 +0000724 if len(s) < 4: s = s + ' '
725 if lineno in breaklist: s = s + 'B'
726 else: s = s + ' '
727 if lineno == self.curframe.f_lineno:
728 s = s + '->'
Georg Brandl19564802006-05-10 17:13:20 +0000729 print >>self.stdout, s + '\t' + line,
Tim Peters2344fae2001-01-15 00:50:52 +0000730 self.lineno = lineno
731 except KeyboardInterrupt:
732 pass
733 do_l = do_list
Guido van Rossum2424f851998-09-11 22:50:09 +0000734
Tim Peters2344fae2001-01-15 00:50:52 +0000735 def do_whatis(self, arg):
736 try:
737 value = eval(arg, self.curframe.f_globals,
738 self.curframe.f_locals)
739 except:
740 t, v = sys.exc_info()[:2]
741 if type(t) == type(''):
742 exc_type_name = t
743 else: exc_type_name = t.__name__
Georg Brandl19564802006-05-10 17:13:20 +0000744 print >>self.stdout, '***', exc_type_name + ':', repr(v)
Tim Peters2344fae2001-01-15 00:50:52 +0000745 return
746 code = None
747 # Is it a function?
748 try: code = value.func_code
749 except: pass
750 if code:
Georg Brandl19564802006-05-10 17:13:20 +0000751 print >>self.stdout, 'Function', code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000752 return
753 # Is it an instance method?
754 try: code = value.im_func.func_code
755 except: pass
756 if code:
Georg Brandl19564802006-05-10 17:13:20 +0000757 print >>self.stdout, 'Method', code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000758 return
759 # None of the above...
Georg Brandl19564802006-05-10 17:13:20 +0000760 print >>self.stdout, type(value)
Guido van Rossum8e2ec561993-07-29 09:37:38 +0000761
Tim Peters2344fae2001-01-15 00:50:52 +0000762 def do_alias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000763 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000764 if len(args) == 0:
765 keys = self.aliases.keys()
766 keys.sort()
767 for alias in keys:
Georg Brandl19564802006-05-10 17:13:20 +0000768 print >>self.stdout, "%s = %s" % (alias, self.aliases[alias])
Tim Peters2344fae2001-01-15 00:50:52 +0000769 return
Guido van Rossum08454592002-07-12 13:10:53 +0000770 if args[0] in self.aliases and len(args) == 1:
Georg Brandl19564802006-05-10 17:13:20 +0000771 print >>self.stdout, "%s = %s" % (args[0], self.aliases[args[0]])
Tim Peters2344fae2001-01-15 00:50:52 +0000772 else:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000773 self.aliases[args[0]] = ' '.join(args[1:])
Guido van Rossum23efba41992-01-27 16:58:47 +0000774
Tim Peters2344fae2001-01-15 00:50:52 +0000775 def do_unalias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000776 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000777 if len(args) == 0: return
Raymond Hettinger54f02222002-06-01 14:18:47 +0000778 if args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000779 del self.aliases[args[0]]
Guido van Rossum00230781993-03-29 11:39:45 +0000780
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000781 #list of all the commands making the program resume execution.
Georg Brandl19564802006-05-10 17:13:20 +0000782 commands_resuming = ['do_continue', 'do_step', 'do_next', 'do_return',
783 'do_quit', 'do_jump']
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000784
Tim Peters2344fae2001-01-15 00:50:52 +0000785 # Print a traceback starting at the top stack frame.
786 # The most recently entered frame is printed last;
787 # this is different from dbx and gdb, but consistent with
788 # the Python interpreter's stack trace.
789 # It is also consistent with the up/down commands (which are
790 # compatible with dbx and gdb: up moves towards 'main()'
791 # and down moves towards the most recent stack frame).
Guido van Rossum2424f851998-09-11 22:50:09 +0000792
Tim Peters2344fae2001-01-15 00:50:52 +0000793 def print_stack_trace(self):
794 try:
795 for frame_lineno in self.stack:
796 self.print_stack_entry(frame_lineno)
797 except KeyboardInterrupt:
798 pass
Guido van Rossum2424f851998-09-11 22:50:09 +0000799
Tim Peters2344fae2001-01-15 00:50:52 +0000800 def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix):
801 frame, lineno = frame_lineno
802 if frame is self.curframe:
Georg Brandl19564802006-05-10 17:13:20 +0000803 print >>self.stdout, '>',
Tim Peters2344fae2001-01-15 00:50:52 +0000804 else:
Georg Brandl19564802006-05-10 17:13:20 +0000805 print >>self.stdout, ' ',
806 print >>self.stdout, self.format_stack_entry(frame_lineno,
807 prompt_prefix)
Guido van Rossum2424f851998-09-11 22:50:09 +0000808
Guido van Rossum921c8241992-01-10 14:54:42 +0000809
Tim Peters2344fae2001-01-15 00:50:52 +0000810 # Help methods (derived from pdb.doc)
Guido van Rossum921c8241992-01-10 14:54:42 +0000811
Tim Peters2344fae2001-01-15 00:50:52 +0000812 def help_help(self):
813 self.help_h()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000814
Tim Peters2344fae2001-01-15 00:50:52 +0000815 def help_h(self):
Georg Brandl19564802006-05-10 17:13:20 +0000816 print >>self.stdout, """h(elp)
Tim Peters2344fae2001-01-15 00:50:52 +0000817Without argument, print the list of available commands.
818With a command name as argument, print help about that command
819"help pdb" pipes the full documentation file to the $PAGER
820"help exec" gives help on the ! command"""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000821
Tim Peters2344fae2001-01-15 00:50:52 +0000822 def help_where(self):
823 self.help_w()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000824
Tim Peters2344fae2001-01-15 00:50:52 +0000825 def help_w(self):
Georg Brandl19564802006-05-10 17:13:20 +0000826 print >>self.stdout, """w(here)
Tim Peters2344fae2001-01-15 00:50:52 +0000827Print a stack trace, with the most recent frame at the bottom.
828An arrow indicates the "current frame", which determines the
Guido van Rossum6bd68352001-01-20 17:57:37 +0000829context of most commands. 'bt' is an alias for this command."""
830
831 help_bt = help_w
Guido van Rossumb6775db1994-08-01 11:34:53 +0000832
Tim Peters2344fae2001-01-15 00:50:52 +0000833 def help_down(self):
834 self.help_d()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000835
Tim Peters2344fae2001-01-15 00:50:52 +0000836 def help_d(self):
Georg Brandl19564802006-05-10 17:13:20 +0000837 print >>self.stdout, """d(own)
Tim Peters2344fae2001-01-15 00:50:52 +0000838Move the current frame one level down in the stack trace
Johannes Gijsbers34c41202004-08-14 15:19:28 +0000839(to a newer frame)."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000840
Tim Peters2344fae2001-01-15 00:50:52 +0000841 def help_up(self):
842 self.help_u()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000843
Tim Peters2344fae2001-01-15 00:50:52 +0000844 def help_u(self):
Georg Brandl19564802006-05-10 17:13:20 +0000845 print >>self.stdout, """u(p)
Tim Peters2344fae2001-01-15 00:50:52 +0000846Move the current frame one level up in the stack trace
Johannes Gijsbers34c41202004-08-14 15:19:28 +0000847(to an older frame)."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000848
Tim Peters2344fae2001-01-15 00:50:52 +0000849 def help_break(self):
850 self.help_b()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000851
Tim Peters2344fae2001-01-15 00:50:52 +0000852 def help_b(self):
Georg Brandl19564802006-05-10 17:13:20 +0000853 print >>self.stdout, """b(reak) ([file:]lineno | function) [, condition]
Tim Peters2344fae2001-01-15 00:50:52 +0000854With a line number argument, set a break there in the current
855file. With a function name, set a break at first executable line
856of that function. Without argument, list all breaks. If a second
857argument is present, it is a string specifying an expression
858which must evaluate to true before the breakpoint is honored.
Guido van Rossumb6775db1994-08-01 11:34:53 +0000859
Tim Peters2344fae2001-01-15 00:50:52 +0000860The line number may be prefixed with a filename and a colon,
861to specify a breakpoint in another file (probably one that
862hasn't been loaded yet). The file is searched for on sys.path;
863the .py suffix may be omitted."""
Guido van Rossumb5699c71998-07-20 23:13:54 +0000864
Tim Peters2344fae2001-01-15 00:50:52 +0000865 def help_clear(self):
866 self.help_cl()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000867
Tim Peters2344fae2001-01-15 00:50:52 +0000868 def help_cl(self):
Georg Brandl19564802006-05-10 17:13:20 +0000869 print >>self.stdout, "cl(ear) filename:lineno"
870 print >>self.stdout, """cl(ear) [bpnumber [bpnumber...]]
Tim Peters2344fae2001-01-15 00:50:52 +0000871With a space separated list of breakpoint numbers, clear
872those breakpoints. Without argument, clear all breaks (but
873first ask confirmation). With a filename:lineno argument,
874clear all breaks at that line in that file.
Guido van Rossumb6775db1994-08-01 11:34:53 +0000875
Tim Peters2344fae2001-01-15 00:50:52 +0000876Note that the argument is different from previous versions of
877the debugger (in python distributions 1.5.1 and before) where
878a linenumber was used instead of either filename:lineno or
879breakpoint numbers."""
Guido van Rossumb5699c71998-07-20 23:13:54 +0000880
Tim Peters2344fae2001-01-15 00:50:52 +0000881 def help_tbreak(self):
Georg Brandl19564802006-05-10 17:13:20 +0000882 print >>self.stdout, """tbreak same arguments as break, but breakpoint is
Tim Peters2344fae2001-01-15 00:50:52 +0000883removed when first hit."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000884
Tim Peters2344fae2001-01-15 00:50:52 +0000885 def help_enable(self):
Georg Brandl19564802006-05-10 17:13:20 +0000886 print >>self.stdout, """enable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +0000887Enables the breakpoints given as a space separated list of
888bp numbers."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000889
Tim Peters2344fae2001-01-15 00:50:52 +0000890 def help_disable(self):
Georg Brandl19564802006-05-10 17:13:20 +0000891 print >>self.stdout, """disable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +0000892Disables the breakpoints given as a space separated list of
893bp numbers."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000894
Tim Peters2344fae2001-01-15 00:50:52 +0000895 def help_ignore(self):
Georg Brandl19564802006-05-10 17:13:20 +0000896 print >>self.stdout, """ignore bpnumber count
Tim Peters2344fae2001-01-15 00:50:52 +0000897Sets the ignore count for the given breakpoint number. A breakpoint
898becomes active when the ignore count is zero. When non-zero, the
899count is decremented each time the breakpoint is reached and the
900breakpoint is not disabled and any associated condition evaluates
901to true."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000902
Tim Peters2344fae2001-01-15 00:50:52 +0000903 def help_condition(self):
Georg Brandl19564802006-05-10 17:13:20 +0000904 print >>self.stdout, """condition bpnumber str_condition
Tim Peters2344fae2001-01-15 00:50:52 +0000905str_condition is a string specifying an expression which
906must evaluate to true before the breakpoint is honored.
907If str_condition is absent, any existing condition is removed;
908i.e., the breakpoint is made unconditional."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000909
Tim Peters2344fae2001-01-15 00:50:52 +0000910 def help_step(self):
911 self.help_s()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000912
Tim Peters2344fae2001-01-15 00:50:52 +0000913 def help_s(self):
Georg Brandl19564802006-05-10 17:13:20 +0000914 print >>self.stdout, """s(tep)
Tim Peters2344fae2001-01-15 00:50:52 +0000915Execute the current line, stop at the first possible occasion
916(either in a function that is called or in the current function)."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000917
Tim Peters2344fae2001-01-15 00:50:52 +0000918 def help_next(self):
919 self.help_n()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000920
Tim Peters2344fae2001-01-15 00:50:52 +0000921 def help_n(self):
Georg Brandl19564802006-05-10 17:13:20 +0000922 print >>self.stdout, """n(ext)
Tim Peters2344fae2001-01-15 00:50:52 +0000923Continue execution until the next line in the current function
924is reached or it returns."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000925
Tim Peters2344fae2001-01-15 00:50:52 +0000926 def help_return(self):
927 self.help_r()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000928
Tim Peters2344fae2001-01-15 00:50:52 +0000929 def help_r(self):
Georg Brandl19564802006-05-10 17:13:20 +0000930 print >>self.stdout, """r(eturn)
Tim Peters2344fae2001-01-15 00:50:52 +0000931Continue execution until the current function returns."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000932
Tim Peters2344fae2001-01-15 00:50:52 +0000933 def help_continue(self):
934 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000935
Tim Peters2344fae2001-01-15 00:50:52 +0000936 def help_cont(self):
937 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000938
Tim Peters2344fae2001-01-15 00:50:52 +0000939 def help_c(self):
Georg Brandl19564802006-05-10 17:13:20 +0000940 print >>self.stdout, """c(ont(inue))
Tim Peters2344fae2001-01-15 00:50:52 +0000941Continue execution, only stop when a breakpoint is encountered."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000942
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000943 def help_jump(self):
944 self.help_j()
945
946 def help_j(self):
Georg Brandl19564802006-05-10 17:13:20 +0000947 print >>self.stdout, """j(ump) lineno
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000948Set the next line that will be executed."""
949
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000950 def help_debug(self):
Georg Brandl19564802006-05-10 17:13:20 +0000951 print >>self.stdout, """debug code
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000952Enter a recursive debugger that steps through the code argument
953(which is an arbitrary expression or statement to be executed
954in the current environment)."""
955
Tim Peters2344fae2001-01-15 00:50:52 +0000956 def help_list(self):
957 self.help_l()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000958
Tim Peters2344fae2001-01-15 00:50:52 +0000959 def help_l(self):
Georg Brandl19564802006-05-10 17:13:20 +0000960 print >>self.stdout, """l(ist) [first [,last]]
Tim Peters2344fae2001-01-15 00:50:52 +0000961List source code for the current file.
962Without arguments, list 11 lines around the current line
963or continue the previous listing.
964With one argument, list 11 lines starting at that line.
965With two arguments, list the given range;
966if the second argument is less than the first, it is a count."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000967
Tim Peters2344fae2001-01-15 00:50:52 +0000968 def help_args(self):
969 self.help_a()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000970
Tim Peters2344fae2001-01-15 00:50:52 +0000971 def help_a(self):
Georg Brandl19564802006-05-10 17:13:20 +0000972 print >>self.stdout, """a(rgs)
Tim Peters2344fae2001-01-15 00:50:52 +0000973Print the arguments of the current function."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000974
Tim Peters2344fae2001-01-15 00:50:52 +0000975 def help_p(self):
Georg Brandl19564802006-05-10 17:13:20 +0000976 print >>self.stdout, """p expression
Tim Peters2344fae2001-01-15 00:50:52 +0000977Print the value of the expression."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000978
Barry Warsaw210bd202002-11-05 22:40:20 +0000979 def help_pp(self):
Georg Brandl19564802006-05-10 17:13:20 +0000980 print >>self.stdout, """pp expression
Barry Warsaw210bd202002-11-05 22:40:20 +0000981Pretty-print the value of the expression."""
982
Tim Peters2344fae2001-01-15 00:50:52 +0000983 def help_exec(self):
Georg Brandl19564802006-05-10 17:13:20 +0000984 print >>self.stdout, """(!) statement
Tim Peters2344fae2001-01-15 00:50:52 +0000985Execute the (one-line) statement in the context of
986the current stack frame.
987The exclamation point can be omitted unless the first word
988of the statement resembles a debugger command.
989To assign to a global variable you must always prefix the
990command with a 'global' command, e.g.:
991(Pdb) global list_options; list_options = ['-l']
992(Pdb)"""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000993
Tim Peters2344fae2001-01-15 00:50:52 +0000994 def help_quit(self):
995 self.help_q()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000996
Tim Peters2344fae2001-01-15 00:50:52 +0000997 def help_q(self):
Georg Brandl19564802006-05-10 17:13:20 +0000998 print >>self.stdout, """q(uit) or exit - Quit from the debugger.
Tim Peters2344fae2001-01-15 00:50:52 +0000999The program being executed is aborted."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001000
Guido van Rossumd1c08f32002-04-15 00:48:24 +00001001 help_exit = help_q
1002
Tim Peters2344fae2001-01-15 00:50:52 +00001003 def help_whatis(self):
Georg Brandl19564802006-05-10 17:13:20 +00001004 print >>self.stdout, """whatis arg
Tim Peters2344fae2001-01-15 00:50:52 +00001005Prints the type of the argument."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001006
Tim Peters2344fae2001-01-15 00:50:52 +00001007 def help_EOF(self):
Georg Brandl19564802006-05-10 17:13:20 +00001008 print >>self.stdout, """EOF
Tim Peters2344fae2001-01-15 00:50:52 +00001009Handles the receipt of EOF as a command."""
Guido van Rossum2424f851998-09-11 22:50:09 +00001010
Tim Peters2344fae2001-01-15 00:50:52 +00001011 def help_alias(self):
Georg Brandl19564802006-05-10 17:13:20 +00001012 print >>self.stdout, """alias [name [command [parameter parameter ...] ]]
Tim Peters2344fae2001-01-15 00:50:52 +00001013Creates an alias called 'name' the executes 'command'. The command
1014must *not* be enclosed in quotes. Replaceable parameters are
1015indicated by %1, %2, and so on, while %* is replaced by all the
1016parameters. If no command is given, the current alias for name
1017is shown. If no name is given, all aliases are listed.
Guido van Rossum2424f851998-09-11 22:50:09 +00001018
Tim Peters2344fae2001-01-15 00:50:52 +00001019Aliases may be nested and can contain anything that can be
1020legally typed at the pdb prompt. Note! You *can* override
1021internal pdb commands with aliases! Those internal commands
1022are then hidden until the alias is removed. Aliasing is recursively
1023applied to the first word of the command line; all other words
1024in the line are left alone.
Guido van Rossum2424f851998-09-11 22:50:09 +00001025
Tim Peters2344fae2001-01-15 00:50:52 +00001026Some useful aliases (especially when placed in the .pdbrc file) are:
Guido van Rossum2424f851998-09-11 22:50:09 +00001027
Tim Peters2344fae2001-01-15 00:50:52 +00001028#Print instance variables (usage "pi classInst")
1029alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
Guido van Rossum2424f851998-09-11 22:50:09 +00001030
Tim Peters2344fae2001-01-15 00:50:52 +00001031#Print instance variables in self
1032alias ps pi self
1033"""
Guido van Rossum2424f851998-09-11 22:50:09 +00001034
Tim Peters2344fae2001-01-15 00:50:52 +00001035 def help_unalias(self):
Georg Brandl19564802006-05-10 17:13:20 +00001036 print >>self.stdout, """unalias name
Tim Peters2344fae2001-01-15 00:50:52 +00001037Deletes the specified alias."""
Guido van Rossum2424f851998-09-11 22:50:09 +00001038
Martin v. Löwisbd30f522006-04-17 17:08:37 +00001039 def help_commands(self):
Georg Brandl19564802006-05-10 17:13:20 +00001040 print >>self.stdout, """commands [bpnumber]
Martin v. Löwisbd30f522006-04-17 17:08:37 +00001041(com) ...
1042(com) end
1043(Pdb)
1044
1045Specify a list of commands for breakpoint number bpnumber. The
1046commands themselves appear on the following lines. Type a line
1047containing just 'end' to terminate the commands.
1048
1049To remove all commands from a breakpoint, type commands and
1050follow it immediately with end; that is, give no commands.
1051
1052With no bpnumber argument, commands refers to the last
1053breakpoint set.
1054
1055You can use breakpoint commands to start your program up again.
1056Simply use the continue command, or step, or any other
1057command that resumes execution.
1058
1059Specifying any command resuming execution (currently continue,
1060step, next, return, jump, quit and their abbreviations) terminates
1061the command list (as if that command was immediately followed by end).
1062This is because any time you resume execution
Martin v. Löwisf62eee12006-04-17 17:37:09 +00001063(even with a simple next or step), you may encounter
Martin v. Löwisbd30f522006-04-17 17:08:37 +00001064another breakpoint--which could have its own command list, leading to
1065ambiguities about which list to execute.
1066
1067 If you use the 'silent' command in the command list, the
1068usual message about stopping at a breakpoint is not printed. This may
1069be desirable for breakpoints that are to print a specific message and
1070then continue. If none of the other commands print anything, you
1071see no sign that the breakpoint was reached.
1072"""
1073
Tim Peters2344fae2001-01-15 00:50:52 +00001074 def help_pdb(self):
1075 help()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001076
Tim Peters2344fae2001-01-15 00:50:52 +00001077 def lookupmodule(self, filename):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001078 """Helper function for break/clear parsing -- may be overridden.
1079
1080 lookupmodule() translates (possibly incomplete) file or module name
1081 into an absolute file name.
1082 """
1083 if os.path.isabs(filename) and os.path.exists(filename):
Tim Peterse718f612004-10-12 21:51:32 +00001084 return filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001085 f = os.path.join(sys.path[0], filename)
1086 if os.path.exists(f) and self.canonic(f) == self.mainpyfile:
1087 return f
Tim Peters2344fae2001-01-15 00:50:52 +00001088 root, ext = os.path.splitext(filename)
1089 if ext == '':
1090 filename = filename + '.py'
1091 if os.path.isabs(filename):
1092 return filename
1093 for dirname in sys.path:
1094 while os.path.islink(dirname):
1095 dirname = os.readlink(dirname)
1096 fullname = os.path.join(dirname, filename)
1097 if os.path.exists(fullname):
1098 return fullname
1099 return None
Guido van Rossumb5699c71998-07-20 23:13:54 +00001100
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001101 def _runscript(self, filename):
1102 # Start with fresh empty copy of globals and locals and tell the script
1103 # that it's being run as __main__ to avoid scripts being able to access
1104 # the pdb.py namespace.
Tim Peterse718f612004-10-12 21:51:32 +00001105 globals_ = {"__name__" : "__main__"}
1106 locals_ = globals_
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001107
1108 # When bdb sets tracing, a number of call and line events happens
1109 # BEFORE debugger even reaches user's code (and the exact sequence of
1110 # events depends on python version). So we take special measures to
1111 # avoid stopping before we reach the main script (see user_line and
1112 # user_call for details).
1113 self._wait_for_mainpyfile = 1
1114 self.mainpyfile = self.canonic(filename)
1115 self._user_requested_quit = 0
1116 statement = 'execfile( "%s")' % filename
1117 self.run(statement, globals=globals_, locals=locals_)
1118
Guido van Rossum35771131992-09-08 11:59:04 +00001119# Simplified interface
1120
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001121def run(statement, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001122 Pdb().run(statement, globals, locals)
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001123
1124def runeval(expression, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001125 return Pdb().runeval(expression, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001126
1127def runctx(statement, globals, locals):
Tim Peters2344fae2001-01-15 00:50:52 +00001128 # B/W compatibility
1129 run(statement, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001130
Raymond Hettinger2ef7e6c2004-10-24 00:32:24 +00001131def runcall(*args, **kwds):
1132 return Pdb().runcall(*args, **kwds)
Guido van Rossum4e160981992-09-02 20:43:20 +00001133
Guido van Rossumb6775db1994-08-01 11:34:53 +00001134def set_trace():
Johannes Gijsbers84a6c202004-11-07 11:35:30 +00001135 Pdb().set_trace(sys._getframe().f_back)
Guido van Rossum35771131992-09-08 11:59:04 +00001136
1137# Post-Mortem interface
1138
1139def post_mortem(t):
Tim Peters2344fae2001-01-15 00:50:52 +00001140 p = Pdb()
1141 p.reset()
1142 while t.tb_next is not None:
1143 t = t.tb_next
1144 p.interaction(t.tb_frame, t)
Guido van Rossum35771131992-09-08 11:59:04 +00001145
1146def pm():
Tim Peters2344fae2001-01-15 00:50:52 +00001147 post_mortem(sys.last_traceback)
Guido van Rossum35771131992-09-08 11:59:04 +00001148
1149
1150# Main program for testing
1151
Guido van Rossum23efba41992-01-27 16:58:47 +00001152TESTCMD = 'import x; x.main()'
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001153
Guido van Rossum921c8241992-01-10 14:54:42 +00001154def test():
Tim Peters2344fae2001-01-15 00:50:52 +00001155 run(TESTCMD)
Guido van Rossume61fa0a1993-10-22 13:56:35 +00001156
1157# print help
1158def help():
Tim Peters2344fae2001-01-15 00:50:52 +00001159 for dirname in sys.path:
1160 fullname = os.path.join(dirname, 'pdb.doc')
1161 if os.path.exists(fullname):
1162 sts = os.system('${PAGER-more} '+fullname)
1163 if sts: print '*** Pager exit status:', sts
1164 break
1165 else:
1166 print 'Sorry, can\'t find the help file "pdb.doc"',
1167 print 'along the Python search path'
Guido van Rossumf17361d1996-07-30 16:28:13 +00001168
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001169def main():
Tim Peters2344fae2001-01-15 00:50:52 +00001170 if not sys.argv[1:]:
1171 print "usage: pdb.py scriptfile [arg] ..."
1172 sys.exit(2)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001173
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001174 mainpyfile = sys.argv[1] # Get script filename
1175 if not os.path.exists(mainpyfile):
1176 print 'Error:', mainpyfile, 'does not exist'
Tim Peters2344fae2001-01-15 00:50:52 +00001177 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001178
Tim Peters2344fae2001-01-15 00:50:52 +00001179 del sys.argv[0] # Hide "pdb.py" from argument list
Guido van Rossumec577d51996-09-10 17:39:34 +00001180
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001181 # Replace pdb's dir with script's dir in front of module search path.
1182 sys.path[0] = os.path.dirname(mainpyfile)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001183
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001184 # Note on saving/restoring sys.argv: it's a good idea when sys.argv was
1185 # modified by the script being debugged. It's a bad idea when it was
1186 # changed by the user from the command line. The best approach would be to
1187 # have a "restart" command which would allow explicit specification of
1188 # command line arguments.
1189 pdb = Pdb()
1190 while 1:
1191 try:
1192 pdb._runscript(mainpyfile)
1193 if pdb._user_requested_quit:
1194 break
Tim Peterse718f612004-10-12 21:51:32 +00001195 print "The program finished and will be restarted"
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001196 except SystemExit:
1197 # In most cases SystemExit does not warrant a post-mortem session.
1198 print "The program exited via sys.exit(). Exit status: ",
1199 print sys.exc_info()[1]
1200 except:
1201 traceback.print_exc()
1202 print "Uncaught exception. Entering post mortem debugging"
1203 print "Running 'cont' or 'step' will restart the program"
1204 t = sys.exc_info()[2]
1205 while t.tb_next is not None:
1206 t = t.tb_next
1207 pdb.interaction(t.tb_frame,t)
1208 print "Post mortem debugger finished. The "+mainpyfile+" will be restarted"
1209
1210
1211# When invoked as main program, invoke the debugger on a script
1212if __name__=='__main__':
1213 main()