blob: 7c6b84854ca0538e5ec46a1166612c71c0a69c93 [file] [log] [blame]
Benjamin Peterson90f5ba52010-03-11 22:53:45 +00001#! /usr/bin/env python3
Guido van Rossumf17361d1996-07-30 16:28:13 +00002
Georg Brandl02053ee2010-07-18 10:11:03 +00003"""
4The Python Debugger Pdb
5=======================
Guido van Rossum92df0c61992-01-14 18:30:15 +00006
Georg Brandl02053ee2010-07-18 10:11:03 +00007To use the debugger in its simplest form:
8
9 >>> import pdb
10 >>> pdb.run('<a statement>')
11
12The debugger's prompt is '(Pdb) '. This will stop in the first
13function call in <a statement>.
14
15Alternatively, if a statement terminated with an unhandled exception,
16you can use pdb's post-mortem facility to inspect the contents of the
17traceback:
18
19 >>> <a statement>
20 <exception traceback>
21 >>> import pdb
22 >>> pdb.pm()
23
24The commands recognized by the debugger are listed in the next
25section. Most can be abbreviated as indicated; e.g., h(elp) means
26that 'help' can be typed as 'h' or 'help' (but not as 'he' or 'hel',
27nor as 'H' or 'Help' or 'HELP'). Optional arguments are enclosed in
28square brackets. Alternatives in the command syntax are separated
29by a vertical bar (|).
30
31A blank line repeats the previous command literally, except for
32'list', where it lists the next 11 lines.
33
34Commands that the debugger doesn't recognize are assumed to be Python
35statements and are executed in the context of the program being
36debugged. Python statements can also be prefixed with an exclamation
37point ('!'). This is a powerful way to inspect the program being
38debugged; it is even possible to change variables or call functions.
39When an exception occurs in such a statement, the exception name is
40printed but the debugger's state is not changed.
41
42The debugger supports aliases, which can save typing. And aliases can
43have parameters (see the alias help entry) which allows one a certain
44level of adaptability to the context under examination.
45
46Multiple commands may be entered on a single line, separated by the
47pair ';;'. No intelligence is applied to separating the commands; the
48input is split at the first ';;', even if it is in the middle of a
49quoted string.
50
51If a file ".pdbrc" exists in your home directory or in the current
52directory, it is read in and executed as if it had been typed at the
53debugger prompt. This is particularly useful for aliases. If both
54files exist, the one in the home directory is read first and aliases
55defined there can be overriden by the local file.
56
57Aside from aliases, the debugger is not directly programmable; but it
58is implemented as a class from which you can derive your own debugger
59class, which you can make as fancy as you like.
60
61
62Debugger commands
63=================
64
65h(elp)
66 Without argument, print the list of available commands. With
67 a command name as argument, print help about that command.
68
69w(here)
70 Print a stack trace, with the most recent frame at the bottom.
71 An arrow indicates the "current frame", which determines the
72 context of most commands.
73
Georg Brandl2dfec552010-07-30 08:43:32 +000074d(own) [count]
Georg Brandl02053ee2010-07-18 10:11:03 +000075 Move the current frame count (default one) levels down in the
76 stack trace (to a newer frame).
77
Georg Brandl2dfec552010-07-30 08:43:32 +000078u(p) [count]
Georg Brandl02053ee2010-07-18 10:11:03 +000079 Move the current frame count (default one) levels up in the
80 stack trace (to an older frame).
81
82b(reak) [ ([filename:]lineno | function) [, condition] ]
83 With a filename:lineno argument, set a break there. If
84 filename is omitted, use the current file. With a function
85 name, set a break at the first executable line of that
86 function. Without argument, list all breaks. Each breakpoint
87 is assigned a number to which all the other breakpoint
88 commands refer.
89
90 The condition argument, if present, is a string which must
91 evaluate to true in order for the breakpoint to be honored.
92
93tbreak [ ([filename:]lineno | function) [, condition] ]
94 Temporary breakpoint, which is removed automatically when it
95 is first hit. The arguments are the same as for break.
96
97cl(ear) [bpnumber [bpnumber ...] ]
98 With a space separated list of breakpoint numbers, clear those
99 breakpoints. Without argument, clear all breaks (but first
100 ask confirmation).
101
102disable bpnumber [bpnumber ...]
103 Disable the breakpoints given as a space separated list of
104 breakpoint numbers. Disabling a breakpoint means it cannot
105 cause the program to stop execution, but unlike clearing a
106 breakpoint, it remains in the list of breakpoints and can be
107 (re-)enabled.
108
109enable bpnumber [bpnumber ...]
110 Enable the breakpoints specified.
111
112ignore bpnumber [count]
113 Set the ignore count for the given breakpoint number. If
114 count is omitted, the ignore count is set to 0. A breakpoint
115 becomes active when the ignore count is zero. When non-zero,
116 the count is decremented each time the breakpoint is reached
117 and the breakpoint is not disabled and any associated
118 condition evaluates to true.
119
120condition bpnumber [condition]
121 Set a new condition for the breakpoint, an expression which
122 must evaluate to true before the breakpoint is honored. If
123 condition is absent, any existing condition is removed; i.e.,
124 the breakpoint is made unconditional.
125
126commands [bpnumber]
127 Specify a list of commands for the breakpoint. Type a line
128 containing just 'end' to terminate the commands. The commands
129 are executed when the breakpoint is hit.
130
131 With no breakpoint number argument, refers to the last
132 breakpoint set.
133
134s(tep)
135 Execute the current line, stop at the first possible occasion
136 (either in a function that is called or in the current
137 function).
138
139n(ext)
140 Continue execution until the next line in the current function
141 is reached or it returns.
142
Georg Brandl2dfec552010-07-30 08:43:32 +0000143unt(il) [lineno]
144 Without argument, continue execution until the line with a
145 number greater than the current one is reached. With a line
146 number, continue execution until a line with a number greater
147 or equal to that is reached. In both cases, also stop when
148 the current frame returns.
Georg Brandl02053ee2010-07-18 10:11:03 +0000149
150r(eturn)
151 Continue execution until the current function returns.
152
153run [args...]
154 Restart the debugged python program. If a string is supplied
155 it is splitted with "shlex", and the result is used as the new
156 sys.argv. History, breakpoints, actions and debugger options
157 are preserved. "restart" is an alias for "run".
158
159c(ont(inue))
160 Continue execution, only stop when a breakpoint is encountered.
161
162l(ist) [first [,last]]
163 List source code for the current file.
164 Without arguments, list 11 lines around the current line
165 or continue the previous listing.
Georg Brandla91a94b2010-07-30 07:14:01 +0000166 With . as argument, list 11 lines around the current line.
Georg Brandl02053ee2010-07-18 10:11:03 +0000167 With one argument, list 11 lines starting at that line.
168 With two arguments, list the given range;
169 if the second argument is less than the first, it is a count.
170
171a(rgs)
172 Print the argument list of the current function.
173
174p expression
175 Print the value of the expression.
176
177(!) statement
178 Execute the (one-line) statement in the context of the current
179 stack frame. The exclamation point can be omitted unless the
180 first word of the statement resembles a debugger command. To
181 assign to a global variable you must always prefix the command
182 with a 'global' command, e.g.:
183 (Pdb) global list_options; list_options = ['-l']
184 (Pdb)
185
186
187whatis arg
188 Print the type of the argument.
189
190alias [name [command]]
191 Creates an alias called 'name' that executes 'command'. The
192 command must *not* be enclosed in quotes. Replaceable
193 parameters can be indicated by %1, %2, and so on, while %* is
194 replaced by all the parameters. If no command is given, the
195 current alias for name is shown. If no name is given, all
196 aliases are listed.
197
198 Aliases may be nested and can contain anything that can be
199 legally typed at the pdb prompt. Note! You *can* override
200 internal pdb commands with aliases! Those internal commands
201 are then hidden until the alias is removed. Aliasing is
202 recursively applied to the first word of the command line; all
203 other words in the line are left alone.
204
205 As an example, here are two useful aliases (especially when
206 placed in the .pdbrc file):
207
208 # Print instance variables (usage "pi classInst")
209 alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
210 # Print instance variables in self
211 alias ps pi self
212
213unalias name
214 Delete the specified alias.
215
216q(uit)
217 Quit from the debugger. The program being executed is aborted.
218"""
Guido van Rossum921c8241992-01-10 14:54:42 +0000219
Guido van Rossum921c8241992-01-10 14:54:42 +0000220import sys
221import linecache
Guido van Rossum23efba41992-01-27 16:58:47 +0000222import cmd
223import bdb
Alexandre Vassalotti1f2ba4b2008-05-16 07:12:44 +0000224from reprlib import Repr
Guido van Rossumb5699c71998-07-20 23:13:54 +0000225import os
Barry Warsaw2bee8fe1999-09-09 16:32:41 +0000226import re
Barry Warsaw210bd202002-11-05 22:40:20 +0000227import pprint
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000228import traceback
Guido van Rossumd8faa362007-04-27 19:54:29 +0000229
230
231class Restart(Exception):
232 """Causes a debugger to be restarted for the debugged python program."""
233 pass
234
Guido van Rossumef1b41b2002-09-10 21:57:14 +0000235# Create a custom safe Repr instance and increase its maxstring.
236# The default of 30 truncates error messages too easily.
237_repr = Repr()
238_repr.maxstring = 200
239_saferepr = _repr.repr
240
Skip Montanaro352674d2001-02-07 23:14:30 +0000241__all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace",
242 "post_mortem", "help"]
243
Barry Warsaw2bee8fe1999-09-09 16:32:41 +0000244def find_function(funcname, filename):
Thomas Wouters89f507f2006-12-13 04:49:30 +0000245 cre = re.compile(r'def\s+%s\s*[(]' % re.escape(funcname))
Tim Peters2344fae2001-01-15 00:50:52 +0000246 try:
247 fp = open(filename)
248 except IOError:
249 return None
250 # consumer of this info expects the first line to be 1
251 lineno = 1
252 answer = None
253 while 1:
254 line = fp.readline()
255 if line == '':
256 break
257 if cre.match(line):
258 answer = funcname, filename, lineno
259 break
260 lineno = lineno + 1
261 fp.close()
262 return answer
Guido van Rossum921c8241992-01-10 14:54:42 +0000263
264
Guido van Rossuma558e371994-11-10 22:27:35 +0000265# Interaction prompt line will separate file and call info from code
266# text using value of line_prefix string. A newline and arrow may
267# be to your liking. You can set it once pdb is imported using the
268# command "pdb.line_prefix = '\n% '".
Tim Peters2344fae2001-01-15 00:50:52 +0000269# line_prefix = ': ' # Use this to get the old situation back
270line_prefix = '\n-> ' # Probably a better default
Guido van Rossuma558e371994-11-10 22:27:35 +0000271
Guido van Rossum23efba41992-01-27 16:58:47 +0000272class Pdb(bdb.Bdb, cmd.Cmd):
Guido van Rossum2424f851998-09-11 22:50:09 +0000273
Georg Brandl243ad662009-05-05 09:00:19 +0000274 def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None):
275 bdb.Bdb.__init__(self, skip=skip)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000276 cmd.Cmd.__init__(self, completekey, stdin, stdout)
277 if stdout:
278 self.use_rawinput = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000279 self.prompt = '(Pdb) '
280 self.aliases = {}
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000281 self.mainpyfile = ''
282 self._wait_for_mainpyfile = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000283 # Try to load readline if it exists
284 try:
285 import readline
286 except ImportError:
287 pass
Guido van Rossum2424f851998-09-11 22:50:09 +0000288
Tim Peters2344fae2001-01-15 00:50:52 +0000289 # Read $HOME/.pdbrc and ./.pdbrc
290 self.rcLines = []
Raymond Hettinger54f02222002-06-01 14:18:47 +0000291 if 'HOME' in os.environ:
Tim Peters2344fae2001-01-15 00:50:52 +0000292 envHome = os.environ['HOME']
293 try:
294 rcFile = open(os.path.join(envHome, ".pdbrc"))
295 except IOError:
296 pass
297 else:
298 for line in rcFile.readlines():
299 self.rcLines.append(line)
300 rcFile.close()
301 try:
302 rcFile = open(".pdbrc")
303 except IOError:
304 pass
305 else:
306 for line in rcFile.readlines():
307 self.rcLines.append(line)
308 rcFile.close()
Guido van Rossum23efba41992-01-27 16:58:47 +0000309
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000310 self.commands = {} # associates a command list to breakpoint numbers
Benjamin Petersond23f8222009-04-05 19:13:16 +0000311 self.commands_doprompt = {} # for each bp num, tells if the prompt
312 # must be disp. after execing the cmd list
313 self.commands_silent = {} # for each bp num, tells if the stack trace
314 # must be disp. after execing the cmd list
315 self.commands_defining = False # True while in the process of defining
316 # a command list
317 self.commands_bnum = None # The breakpoint number for which we are
318 # defining a list
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000319
Tim Peters2344fae2001-01-15 00:50:52 +0000320 def reset(self):
321 bdb.Bdb.reset(self)
322 self.forget()
Guido van Rossum23efba41992-01-27 16:58:47 +0000323
Tim Peters2344fae2001-01-15 00:50:52 +0000324 def forget(self):
325 self.lineno = None
326 self.stack = []
327 self.curindex = 0
328 self.curframe = None
Guido van Rossum2424f851998-09-11 22:50:09 +0000329
Tim Peters2344fae2001-01-15 00:50:52 +0000330 def setup(self, f, t):
331 self.forget()
332 self.stack, self.curindex = self.get_stack(f, t)
333 self.curframe = self.stack[self.curindex][0]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000334 # The f_locals dictionary is updated from the actual frame
335 # locals whenever the .f_locals accessor is called, so we
336 # cache it here to ensure that modifications are not overwritten.
337 self.curframe_locals = self.curframe.f_locals
Georg Brandle0230912010-07-30 08:29:39 +0000338 return self.execRcLines()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000339
Tim Peters2344fae2001-01-15 00:50:52 +0000340 # Can be executed earlier than 'setup' if desired
341 def execRcLines(self):
Georg Brandle0230912010-07-30 08:29:39 +0000342 if not self.rcLines:
343 return
344 # local copy because of recursion
345 rcLines = self.rcLines
346 rcLines.reverse()
347 # execute every line only once
348 self.rcLines = []
349 while rcLines:
350 line = rcLines.pop().strip()
351 if line and line[0] != '#':
352 if self.onecmd(line):
353 # if onecmd returns True, the command wants to exit
354 # from the interaction, save leftover rc lines
355 # to execute before next interaction
356 self.rcLines += reversed(rcLines)
357 return True
Guido van Rossum2424f851998-09-11 22:50:09 +0000358
Tim Peters280488b2002-08-23 18:19:30 +0000359 # Override Bdb methods
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000360
361 def user_call(self, frame, argument_list):
362 """This method is called when there is the remote possibility
363 that we ever need to stop in this function."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000364 if self._wait_for_mainpyfile:
365 return
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000366 if self.stop_here(frame):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000367 print('--Call--', file=self.stdout)
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000368 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000369
Tim Peters2344fae2001-01-15 00:50:52 +0000370 def user_line(self, frame):
371 """This function is called when we stop or break at this line."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000372 if self._wait_for_mainpyfile:
373 if (self.mainpyfile != self.canonic(frame.f_code.co_filename)
374 or frame.f_lineno<= 0):
375 return
376 self._wait_for_mainpyfile = 0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000377 if self.bp_commands(frame):
378 self.interaction(frame, None)
379
Georg Brandle0230912010-07-30 08:29:39 +0000380 def bp_commands(self, frame):
Georg Brandl3078df02009-05-05 09:11:31 +0000381 """Call every command that was set for the current active breakpoint
382 (if there is one).
383
384 Returns True if the normal interaction function must be called,
385 False otherwise."""
386 # self.currentbp is set in bdb in Bdb.break_here if a breakpoint was hit
387 if getattr(self, "currentbp", False) and \
388 self.currentbp in self.commands:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000389 currentbp = self.currentbp
390 self.currentbp = 0
391 lastcmd_back = self.lastcmd
392 self.setup(frame, None)
393 for line in self.commands[currentbp]:
394 self.onecmd(line)
395 self.lastcmd = lastcmd_back
396 if not self.commands_silent[currentbp]:
397 self.print_stack_entry(self.stack[self.curindex])
398 if self.commands_doprompt[currentbp]:
399 self.cmdloop()
400 self.forget()
401 return
402 return 1
Guido van Rossum9e1ee971997-07-11 13:43:53 +0000403
Tim Peters2344fae2001-01-15 00:50:52 +0000404 def user_return(self, frame, return_value):
405 """This function is called when a return trap is set here."""
406 frame.f_locals['__return__'] = return_value
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000407 print('--Return--', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000408 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000409
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000410 def user_exception(self, frame, exc_info):
Tim Peters2344fae2001-01-15 00:50:52 +0000411 """This function is called if an exception occurs,
412 but only if we are to stop at or just below this level."""
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000413 exc_type, exc_value, exc_traceback = exc_info
Tim Peters2344fae2001-01-15 00:50:52 +0000414 frame.f_locals['__exception__'] = exc_type, exc_value
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000415 exc_type_name = exc_type.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000416 print(exc_type_name + ':', _saferepr(exc_value), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000417 self.interaction(frame, exc_traceback)
Guido van Rossum2424f851998-09-11 22:50:09 +0000418
Tim Peters2344fae2001-01-15 00:50:52 +0000419 # General interaction function
420
421 def interaction(self, frame, traceback):
Georg Brandle0230912010-07-30 08:29:39 +0000422 if self.setup(frame, traceback):
423 # no interaction desired at this time (happens if .pdbrc contains
424 # a command like "continue")
425 self.forget()
426 return
Tim Peters2344fae2001-01-15 00:50:52 +0000427 self.print_stack_entry(self.stack[self.curindex])
428 self.cmdloop()
429 self.forget()
430
Benjamin Petersond23f8222009-04-05 19:13:16 +0000431 def displayhook(self, obj):
432 """Custom displayhook for the exec in default(), which prevents
433 assignment of the _ variable in the builtins.
434 """
Georg Brandl9fa2e022009-09-16 16:40:45 +0000435 # reproduce the behavior of the standard displayhook, not printing None
436 if obj is not None:
437 print(repr(obj))
Benjamin Petersond23f8222009-04-05 19:13:16 +0000438
Tim Peters2344fae2001-01-15 00:50:52 +0000439 def default(self, line):
440 if line[:1] == '!': line = line[1:]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000441 locals = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000442 globals = self.curframe.f_globals
443 try:
444 code = compile(line + '\n', '<stdin>', 'single')
Christian Heimes679db4a2008-01-18 09:56:22 +0000445 save_stdout = sys.stdout
446 save_stdin = sys.stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000447 save_displayhook = sys.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000448 try:
449 sys.stdin = self.stdin
450 sys.stdout = self.stdout
Benjamin Petersond23f8222009-04-05 19:13:16 +0000451 sys.displayhook = self.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000452 exec(code, globals, locals)
453 finally:
454 sys.stdout = save_stdout
455 sys.stdin = save_stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000456 sys.displayhook = save_displayhook
Tim Peters2344fae2001-01-15 00:50:52 +0000457 except:
458 t, v = sys.exc_info()[:2]
459 if type(t) == type(''):
460 exc_type_name = t
461 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000462 print('***', exc_type_name + ':', v, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000463
464 def precmd(self, line):
465 """Handle alias expansion and ';;' separator."""
Guido van Rossum08454592002-07-12 13:10:53 +0000466 if not line.strip():
Tim Peters2344fae2001-01-15 00:50:52 +0000467 return line
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000468 args = line.split()
Raymond Hettinger54f02222002-06-01 14:18:47 +0000469 while args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000470 line = self.aliases[args[0]]
471 ii = 1
472 for tmpArg in args[1:]:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000473 line = line.replace("%" + str(ii),
Tim Peters2344fae2001-01-15 00:50:52 +0000474 tmpArg)
475 ii = ii + 1
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000476 line = line.replace("%*", ' '.join(args[1:]))
477 args = line.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000478 # split into ';;' separated commands
479 # unless it's an alias command
480 if args[0] != 'alias':
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000481 marker = line.find(';;')
Tim Peters2344fae2001-01-15 00:50:52 +0000482 if marker >= 0:
483 # queue up everything after marker
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000484 next = line[marker+2:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000485 self.cmdqueue.append(next)
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000486 line = line[:marker].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000487 return line
488
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000489 def onecmd(self, line):
490 """Interpret the argument as though it had been typed in response
491 to the prompt.
492
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000493 Checks whether this line is typed at the normal prompt or in
494 a breakpoint command list definition.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000495 """
496 if not self.commands_defining:
497 return cmd.Cmd.onecmd(self, line)
498 else:
499 return self.handle_command_def(line)
500
501 def handle_command_def(self,line):
502 """ Handles one command line during command list definition. """
503 cmd, arg, line = self.parseline(line)
504 if cmd == 'silent':
505 self.commands_silent[self.commands_bnum] = True
506 return # continue to handle other cmd def in the cmd list
507 elif cmd == 'end':
508 self.cmdqueue = []
509 return 1 # end of cmd list
510 cmdlist = self.commands[self.commands_bnum]
511 if (arg):
512 cmdlist.append(cmd+' '+arg)
513 else:
514 cmdlist.append(cmd)
515 # Determine if we must stop
516 try:
517 func = getattr(self, 'do_' + cmd)
518 except AttributeError:
519 func = self.default
Georg Brandl3078df02009-05-05 09:11:31 +0000520 # one of the resuming commands
521 if func.__name__ in self.commands_resuming:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000522 self.commands_doprompt[self.commands_bnum] = False
523 self.cmdqueue = []
524 return 1
525 return
526
Tim Peters2344fae2001-01-15 00:50:52 +0000527 # Command definitions, called by cmdloop()
528 # The argument is the remaining string on the command line
529 # Return true to exit from the command loop
530
531 do_h = cmd.Cmd.do_help
532
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000533 def do_commands(self, arg):
Georg Brandl3078df02009-05-05 09:11:31 +0000534 """Defines a list of commands associated to a breakpoint.
535
536 Those commands will be executed whenever the breakpoint causes
537 the program to stop execution."""
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000538 if not arg:
539 bnum = len(bdb.Breakpoint.bpbynumber)-1
540 else:
541 try:
542 bnum = int(arg)
543 except:
Georg Brandl3078df02009-05-05 09:11:31 +0000544 print("Usage : commands [bnum]\n ...\n end",
545 file=self.stdout)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000546 return
547 self.commands_bnum = bnum
548 self.commands[bnum] = []
549 self.commands_doprompt[bnum] = True
550 self.commands_silent[bnum] = False
551 prompt_back = self.prompt
552 self.prompt = '(com) '
553 self.commands_defining = True
554 self.cmdloop()
555 self.commands_defining = False
556 self.prompt = prompt_back
557
Tim Peters2344fae2001-01-15 00:50:52 +0000558 def do_break(self, arg, temporary = 0):
559 # break [ ([filename:]lineno | function) [, "condition"] ]
560 if not arg:
561 if self.breaks: # There's at least one
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000562 print("Num Type Disp Enb Where", file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000563 for bp in bdb.Breakpoint.bpbynumber:
564 if bp:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000565 bp.bpprint(self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000566 return
567 # parse arguments; comma has lowest precedence
568 # and cannot occur in filename
569 filename = None
570 lineno = None
571 cond = None
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000572 comma = arg.find(',')
Tim Peters2344fae2001-01-15 00:50:52 +0000573 if comma > 0:
574 # parse stuff after comma: "condition"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000575 cond = arg[comma+1:].lstrip()
576 arg = arg[:comma].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000577 # parse stuff before comma: [filename:]lineno | function
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000578 colon = arg.rfind(':')
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000579 funcname = None
Tim Peters2344fae2001-01-15 00:50:52 +0000580 if colon >= 0:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000581 filename = arg[:colon].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000582 f = self.lookupmodule(filename)
583 if not f:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000584 print('*** ', repr(filename), end=' ', file=self.stdout)
585 print('not found from sys.path', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000586 return
587 else:
588 filename = f
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000589 arg = arg[colon+1:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000590 try:
591 lineno = int(arg)
Guido van Rossumb940e112007-01-10 16:19:56 +0000592 except ValueError as msg:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000593 print('*** Bad lineno:', arg, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000594 return
595 else:
596 # no colon; can be lineno or function
597 try:
598 lineno = int(arg)
599 except ValueError:
600 try:
601 func = eval(arg,
602 self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +0000603 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000604 except:
605 func = arg
606 try:
Christian Heimesff737952007-11-27 10:40:20 +0000607 if hasattr(func, '__func__'):
608 func = func.__func__
Neal Norwitz221085d2007-02-25 20:55:47 +0000609 code = func.__code__
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000610 #use co_name to identify the bkpt (function names
611 #could be aliased, but co_name is invariant)
612 funcname = code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000613 lineno = code.co_firstlineno
614 filename = code.co_filename
615 except:
616 # last thing to try
617 (ok, filename, ln) = self.lineinfo(arg)
618 if not ok:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000619 print('*** The specified object', end=' ', file=self.stdout)
620 print(repr(arg), end=' ', file=self.stdout)
621 print('is not a function', file=self.stdout)
622 print('or was not found along sys.path.', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000623 return
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000624 funcname = ok # ok contains a function name
Tim Peters2344fae2001-01-15 00:50:52 +0000625 lineno = int(ln)
626 if not filename:
627 filename = self.defaultFile()
628 # Check for reasonable breakpoint
629 line = self.checkline(filename, lineno)
630 if line:
631 # now set the break point
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000632 err = self.set_break(filename, line, temporary, cond, funcname)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000633 if err: print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000634 else:
635 bp = self.get_breaks(filename, line)[-1]
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000636 print("Breakpoint %d at %s:%d" % (bp.number,
Thomas Wouters477c8d52006-05-27 19:21:47 +0000637 bp.file,
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000638 bp.line), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000639
640 # To be overridden in derived debuggers
641 def defaultFile(self):
642 """Produce a reasonable default."""
643 filename = self.curframe.f_code.co_filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000644 if filename == '<string>' and self.mainpyfile:
645 filename = self.mainpyfile
Tim Peters2344fae2001-01-15 00:50:52 +0000646 return filename
647
648 do_b = do_break
649
650 def do_tbreak(self, arg):
651 self.do_break(arg, 1)
652
653 def lineinfo(self, identifier):
654 failed = (None, None, None)
655 # Input is identifier, may be in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000656 idstring = identifier.split("'")
Tim Peters2344fae2001-01-15 00:50:52 +0000657 if len(idstring) == 1:
658 # not in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000659 id = idstring[0].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000660 elif len(idstring) == 3:
661 # quoted
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000662 id = idstring[1].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000663 else:
664 return failed
665 if id == '': return failed
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000666 parts = id.split('.')
Tim Peters2344fae2001-01-15 00:50:52 +0000667 # Protection for derived debuggers
668 if parts[0] == 'self':
669 del parts[0]
670 if len(parts) == 0:
671 return failed
672 # Best first guess at file to look at
673 fname = self.defaultFile()
674 if len(parts) == 1:
675 item = parts[0]
676 else:
677 # More than one part.
678 # First is module, second is method/class
679 f = self.lookupmodule(parts[0])
680 if f:
681 fname = f
682 item = parts[1]
683 answer = find_function(item, fname)
684 return answer or failed
685
686 def checkline(self, filename, lineno):
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000687 """Check whether specified line seems to be executable.
Tim Peters2344fae2001-01-15 00:50:52 +0000688
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000689 Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank
690 line or EOF). Warning: testing is not comprehensive.
691 """
Georg Brandl1e30bd32010-07-30 07:21:26 +0000692 # this method should be callable before starting debugging, so default
693 # to "no globals" if there is no current frame
694 globs = self.curframe.f_globals if hasattr(self, 'curframe') else None
695 line = linecache.getline(filename, lineno, globs)
Tim Peters2344fae2001-01-15 00:50:52 +0000696 if not line:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000697 print('End of file', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000698 return 0
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000699 line = line.strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000700 # Don't allow setting breakpoint at a blank line
Guido van Rossum08454592002-07-12 13:10:53 +0000701 if (not line or (line[0] == '#') or
702 (line[:3] == '"""') or line[:3] == "'''"):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000703 print('*** Blank or comment', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000704 return 0
Tim Peters2344fae2001-01-15 00:50:52 +0000705 return lineno
706
707 def do_enable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000708 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000709 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000710 try:
711 i = int(i)
712 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000713 print('Breakpoint index %r is not a number' % i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000714 continue
715
716 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000717 print('No breakpoint numbered', i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000718 continue
719
720 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000721 if bp:
722 bp.enable()
723
724 def do_disable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000725 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000726 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000727 try:
728 i = int(i)
729 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000730 print('Breakpoint index %r is not a number' % i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000731 continue
Tim Petersf545baa2003-06-15 23:26:30 +0000732
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000733 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000734 print('No breakpoint numbered', i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000735 continue
736
737 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000738 if bp:
739 bp.disable()
740
741 def do_condition(self, arg):
742 # arg is breakpoint number and condition
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000743 args = arg.split(' ', 1)
Thomas Woutersb2137042007-02-01 18:02:27 +0000744 try:
745 bpnum = int(args[0].strip())
746 except ValueError:
747 # something went wrong
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000748 print('Breakpoint index %r is not a number' % args[0], file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000749 return
Tim Peters2344fae2001-01-15 00:50:52 +0000750 try:
751 cond = args[1]
752 except:
753 cond = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000754 try:
755 bp = bdb.Breakpoint.bpbynumber[bpnum]
756 except IndexError:
Neal Norwitz752abd02008-05-13 04:55:24 +0000757 print('Breakpoint index %r is not valid' % args[0],
758 file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000759 return
Tim Peters2344fae2001-01-15 00:50:52 +0000760 if bp:
761 bp.cond = cond
762 if not cond:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000763 print('Breakpoint', bpnum, end=' ', file=self.stdout)
764 print('is now unconditional.', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000765
766 def do_ignore(self,arg):
767 """arg is bp number followed by ignore count."""
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000768 args = arg.split()
Thomas Woutersb2137042007-02-01 18:02:27 +0000769 try:
770 bpnum = int(args[0].strip())
771 except ValueError:
772 # something went wrong
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000773 print('Breakpoint index %r is not a number' % args[0], file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000774 return
Tim Peters2344fae2001-01-15 00:50:52 +0000775 try:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000776 count = int(args[1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000777 except:
778 count = 0
Guido van Rossumd8faa362007-04-27 19:54:29 +0000779 try:
780 bp = bdb.Breakpoint.bpbynumber[bpnum]
781 except IndexError:
Neal Norwitz752abd02008-05-13 04:55:24 +0000782 print('Breakpoint index %r is not valid' % args[0],
783 file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000784 return
Tim Peters2344fae2001-01-15 00:50:52 +0000785 if bp:
786 bp.ignore = count
Guido van Rossum08454592002-07-12 13:10:53 +0000787 if count > 0:
Tim Peters2344fae2001-01-15 00:50:52 +0000788 reply = 'Will ignore next '
Guido van Rossum08454592002-07-12 13:10:53 +0000789 if count > 1:
Tim Peters2344fae2001-01-15 00:50:52 +0000790 reply = reply + '%d crossings' % count
791 else:
792 reply = reply + '1 crossing'
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000793 print(reply + ' of breakpoint %d.' % bpnum, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000794 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000795 print('Will stop next time breakpoint', end=' ', file=self.stdout)
796 print(bpnum, 'is reached.', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000797
798 def do_clear(self, arg):
799 """Three possibilities, tried in this order:
800 clear -> clear all breaks, ask for confirmation
801 clear file:lineno -> clear all breaks at file:lineno
802 clear bpno bpno ... -> clear breakpoints by number"""
803 if not arg:
804 try:
Guido van Rossumc5b6ab02007-05-27 09:19:52 +0000805 reply = input('Clear all breaks? ')
Tim Peters2344fae2001-01-15 00:50:52 +0000806 except EOFError:
807 reply = 'no'
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000808 reply = reply.strip().lower()
Tim Peters2344fae2001-01-15 00:50:52 +0000809 if reply in ('y', 'yes'):
810 self.clear_all_breaks()
811 return
812 if ':' in arg:
813 # Make sure it works for "clear C:\foo\bar.py:12"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000814 i = arg.rfind(':')
Tim Peters2344fae2001-01-15 00:50:52 +0000815 filename = arg[:i]
816 arg = arg[i+1:]
817 try:
818 lineno = int(arg)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000819 except ValueError:
Tim Peters2344fae2001-01-15 00:50:52 +0000820 err = "Invalid line number (%s)" % arg
821 else:
822 err = self.clear_break(filename, lineno)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000823 if err: print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000824 return
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000825 numberlist = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000826 for i in numberlist:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000827 try:
828 i = int(i)
829 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000830 print('Breakpoint index %r is not a number' % i, file=self.stdout)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000831 continue
832
Georg Brandl6d2b3462005-08-24 07:36:17 +0000833 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000834 print('No breakpoint numbered', i, file=self.stdout)
Georg Brandl6d2b3462005-08-24 07:36:17 +0000835 continue
Tim Peters2344fae2001-01-15 00:50:52 +0000836 err = self.clear_bpbynumber(i)
837 if err:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000838 print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000839 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000840 print('Deleted breakpoint', i, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000841 do_cl = do_clear # 'c' is already an abbreviation for 'continue'
842
843 def do_where(self, arg):
844 self.print_stack_trace()
845 do_w = do_where
Guido van Rossum6bd68352001-01-20 17:57:37 +0000846 do_bt = do_where
Tim Peters2344fae2001-01-15 00:50:52 +0000847
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000848 def _select_frame(self, number):
849 assert 0 <= number < len(self.stack)
850 self.curindex = number
851 self.curframe = self.stack[self.curindex][0]
852 self.curframe_locals = self.curframe.f_locals
853 self.print_stack_entry(self.stack[self.curindex])
854 self.lineno = None
855
Tim Peters2344fae2001-01-15 00:50:52 +0000856 def do_up(self, arg):
857 if self.curindex == 0:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000858 print('*** Oldest frame', file=self.stdout)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000859 return
860 try:
861 count = int(arg or 1)
862 except ValueError:
863 print('*** Invalid frame count (%s)' % arg, file=self.stdout)
864 return
865 if count < 0:
866 newframe = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000867 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000868 newframe = max(0, self.curindex - count)
869 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000870 do_u = do_up
871
872 def do_down(self, arg):
873 if self.curindex + 1 == len(self.stack):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000874 print('*** Newest frame', file=self.stdout)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000875 return
876 try:
877 count = int(arg or 1)
878 except ValueError:
879 print('*** Invalid frame count (%s)' % arg, file=self.stdout)
880 return
881 if count < 0:
882 newframe = len(self.stack) - 1
Tim Peters2344fae2001-01-15 00:50:52 +0000883 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000884 newframe = min(len(self.stack) - 1, self.curindex + count)
885 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000886 do_d = do_down
887
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000888 def do_until(self, arg):
Georg Brandl2dfec552010-07-30 08:43:32 +0000889 if arg:
890 try:
891 lineno = int(arg)
892 except ValueError:
893 print('*** Error in argument:', repr(arg), file=self.stdout)
894 return
895 if lineno <= self.curframe.f_lineno:
896 print('*** "until" line number is smaller than current '
897 'line number', file=self.stdout)
898 return
899 else:
900 lineno = None
901 self.set_until(self.curframe, lineno)
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000902 return 1
903 do_unt = do_until
904
Tim Peters2344fae2001-01-15 00:50:52 +0000905 def do_step(self, arg):
906 self.set_step()
907 return 1
908 do_s = do_step
909
910 def do_next(self, arg):
911 self.set_next(self.curframe)
912 return 1
913 do_n = do_next
914
Guido van Rossumd8faa362007-04-27 19:54:29 +0000915 def do_run(self, arg):
Georg Brandl3078df02009-05-05 09:11:31 +0000916 """Restart program by raising an exception to be caught in the main
917 debugger loop. If arguments were given, set them in sys.argv."""
Guido van Rossumd8faa362007-04-27 19:54:29 +0000918 if arg:
919 import shlex
920 argv0 = sys.argv[0:1]
921 sys.argv = shlex.split(arg)
922 sys.argv[:0] = argv0
923 raise Restart
924
925 do_restart = do_run
926
Tim Peters2344fae2001-01-15 00:50:52 +0000927 def do_return(self, arg):
928 self.set_return(self.curframe)
929 return 1
930 do_r = do_return
931
932 def do_continue(self, arg):
933 self.set_continue()
934 return 1
935 do_c = do_cont = do_continue
936
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000937 def do_jump(self, arg):
938 if self.curindex + 1 != len(self.stack):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000939 print("*** You can only jump within the bottom frame", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000940 return
941 try:
942 arg = int(arg)
943 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000944 print("*** The 'jump' command requires a line number.", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000945 else:
946 try:
947 # Do the jump, fix up our copy of the stack, and display the
948 # new position
949 self.curframe.f_lineno = arg
950 self.stack[self.curindex] = self.stack[self.curindex][0], arg
951 self.print_stack_entry(self.stack[self.curindex])
Guido van Rossumb940e112007-01-10 16:19:56 +0000952 except ValueError as e:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000953 print('*** Jump failed:', e, file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000954 do_j = do_jump
955
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000956 def do_debug(self, arg):
957 sys.settrace(None)
958 globals = self.curframe.f_globals
Benjamin Petersond23f8222009-04-05 19:13:16 +0000959 locals = self.curframe_locals
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000960 p = Pdb(self.completekey, self.stdin, self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000961 p.prompt = "(%s) " % self.prompt.strip()
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000962 print("ENTERING RECURSIVE DEBUGGER", file=self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000963 sys.call_tracing(p.run, (arg, globals, locals))
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000964 print("LEAVING RECURSIVE DEBUGGER", file=self.stdout)
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000965 sys.settrace(self.trace_dispatch)
966 self.lastcmd = p.lastcmd
967
Tim Peters2344fae2001-01-15 00:50:52 +0000968 def do_quit(self, arg):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000969 self._user_requested_quit = 1
Tim Peters2344fae2001-01-15 00:50:52 +0000970 self.set_quit()
971 return 1
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000972
Tim Peters2344fae2001-01-15 00:50:52 +0000973 do_q = do_quit
Guido van Rossumd1c08f32002-04-15 00:48:24 +0000974 do_exit = do_quit
Tim Peters2344fae2001-01-15 00:50:52 +0000975
Guido van Rossumeef26072003-01-13 21:13:55 +0000976 def do_EOF(self, arg):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000977 print(file=self.stdout)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000978 self._user_requested_quit = 1
Guido van Rossumeef26072003-01-13 21:13:55 +0000979 self.set_quit()
980 return 1
981
Tim Peters2344fae2001-01-15 00:50:52 +0000982 def do_args(self, arg):
Benjamin Petersond23f8222009-04-05 19:13:16 +0000983 co = self.curframe.f_code
984 dict = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000985 n = co.co_argcount
986 if co.co_flags & 4: n = n+1
987 if co.co_flags & 8: n = n+1
988 for i in range(n):
989 name = co.co_varnames[i]
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000990 print(name, '=', end=' ', file=self.stdout)
991 if name in dict: print(dict[name], file=self.stdout)
992 else: print("*** undefined ***", file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000993 do_a = do_args
Guido van Rossum2424f851998-09-11 22:50:09 +0000994
Tim Peters2344fae2001-01-15 00:50:52 +0000995 def do_retval(self, arg):
Benjamin Petersond23f8222009-04-05 19:13:16 +0000996 if '__return__' in self.curframe_locals:
997 print(self.curframe_locals['__return__'], file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000998 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000999 print('*** Not yet returned!', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001000 do_rv = do_retval
Guido van Rossum2424f851998-09-11 22:50:09 +00001001
Barry Warsaw210bd202002-11-05 22:40:20 +00001002 def _getval(self, arg):
Tim Peters2344fae2001-01-15 00:50:52 +00001003 try:
Benjamin Petersond23f8222009-04-05 19:13:16 +00001004 return eval(arg, self.curframe.f_globals, self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +00001005 except:
1006 t, v = sys.exc_info()[:2]
Barry Warsaw210bd202002-11-05 22:40:20 +00001007 if isinstance(t, str):
Tim Peters2344fae2001-01-15 00:50:52 +00001008 exc_type_name = t
1009 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001010 print('***', exc_type_name + ':', repr(v), file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001011 raise
Guido van Rossum2424f851998-09-11 22:50:09 +00001012
Barry Warsaw210bd202002-11-05 22:40:20 +00001013 def do_p(self, arg):
1014 try:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001015 print(repr(self._getval(arg)), file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001016 except:
1017 pass
Georg Brandlc9879242007-09-04 07:07:56 +00001018 # make "print" an alias of "p" since print isn't a Python statement anymore
1019 do_print = do_p
Barry Warsaw210bd202002-11-05 22:40:20 +00001020
1021 def do_pp(self, arg):
1022 try:
Thomas Wouters477c8d52006-05-27 19:21:47 +00001023 pprint.pprint(self._getval(arg), self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001024 except:
1025 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001026
Tim Peters2344fae2001-01-15 00:50:52 +00001027 def do_list(self, arg):
1028 self.lastcmd = 'list'
1029 last = None
Georg Brandla91a94b2010-07-30 07:14:01 +00001030 if arg and arg != '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001031 try:
1032 x = eval(arg, {}, {})
1033 if type(x) == type(()):
1034 first, last = x
1035 first = int(first)
1036 last = int(last)
1037 if last < first:
1038 # Assume it's a count
1039 last = first + last
1040 else:
1041 first = max(1, int(x) - 5)
1042 except:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001043 print('*** Error in argument:', repr(arg), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001044 return
Georg Brandla91a94b2010-07-30 07:14:01 +00001045 elif self.lineno is None or arg == '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001046 first = max(1, self.curframe.f_lineno - 5)
1047 else:
1048 first = self.lineno + 1
1049 if last is None:
1050 last = first + 10
1051 filename = self.curframe.f_code.co_filename
1052 breaklist = self.get_file_breaks(filename)
1053 try:
1054 for lineno in range(first, last+1):
Georg Brandl3078df02009-05-05 09:11:31 +00001055 line = linecache.getline(filename, lineno,
1056 self.curframe.f_globals)
Tim Peters2344fae2001-01-15 00:50:52 +00001057 if not line:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001058 print('[EOF]', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001059 break
1060 else:
Walter Dörwald70a6b492004-02-12 17:35:32 +00001061 s = repr(lineno).rjust(3)
Tim Peters2344fae2001-01-15 00:50:52 +00001062 if len(s) < 4: s = s + ' '
1063 if lineno in breaklist: s = s + 'B'
1064 else: s = s + ' '
1065 if lineno == self.curframe.f_lineno:
1066 s = s + '->'
Guido van Rossumceae3752007-02-09 22:16:54 +00001067 print(s + '\t' + line, end='', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001068 self.lineno = lineno
1069 except KeyboardInterrupt:
1070 pass
1071 do_l = do_list
Guido van Rossum2424f851998-09-11 22:50:09 +00001072
Tim Peters2344fae2001-01-15 00:50:52 +00001073 def do_whatis(self, arg):
1074 try:
1075 value = eval(arg, self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +00001076 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +00001077 except:
1078 t, v = sys.exc_info()[:2]
1079 if type(t) == type(''):
1080 exc_type_name = t
1081 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001082 print('***', exc_type_name + ':', repr(v), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001083 return
1084 code = None
1085 # Is it a function?
Neal Norwitz221085d2007-02-25 20:55:47 +00001086 try: code = value.__code__
Tim Peters2344fae2001-01-15 00:50:52 +00001087 except: pass
1088 if code:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001089 print('Function', code.co_name, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001090 return
1091 # Is it an instance method?
Christian Heimesff737952007-11-27 10:40:20 +00001092 try: code = value.__func__.__code__
Tim Peters2344fae2001-01-15 00:50:52 +00001093 except: pass
1094 if code:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001095 print('Method', code.co_name, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001096 return
1097 # None of the above...
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001098 print(type(value), file=self.stdout)
Guido van Rossum8e2ec561993-07-29 09:37:38 +00001099
Tim Peters2344fae2001-01-15 00:50:52 +00001100 def do_alias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001101 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001102 if len(args) == 0:
Benjamin Petersonbe74a372009-09-11 21:17:13 +00001103 keys = sorted(self.aliases.keys())
Tim Peters2344fae2001-01-15 00:50:52 +00001104 for alias in keys:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001105 print("%s = %s" % (alias, self.aliases[alias]), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001106 return
Guido van Rossum08454592002-07-12 13:10:53 +00001107 if args[0] in self.aliases and len(args) == 1:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001108 print("%s = %s" % (args[0], self.aliases[args[0]]), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001109 else:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001110 self.aliases[args[0]] = ' '.join(args[1:])
Guido van Rossum23efba41992-01-27 16:58:47 +00001111
Tim Peters2344fae2001-01-15 00:50:52 +00001112 def do_unalias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001113 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001114 if len(args) == 0: return
Raymond Hettinger54f02222002-06-01 14:18:47 +00001115 if args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +00001116 del self.aliases[args[0]]
Guido van Rossum00230781993-03-29 11:39:45 +00001117
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001118 #list of all the commands making the program resume execution.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001119 commands_resuming = ['do_continue', 'do_step', 'do_next', 'do_return',
1120 'do_quit', 'do_jump']
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001121
Tim Peters2344fae2001-01-15 00:50:52 +00001122 # Print a traceback starting at the top stack frame.
1123 # The most recently entered frame is printed last;
1124 # this is different from dbx and gdb, but consistent with
1125 # the Python interpreter's stack trace.
1126 # It is also consistent with the up/down commands (which are
1127 # compatible with dbx and gdb: up moves towards 'main()'
1128 # and down moves towards the most recent stack frame).
Guido van Rossum2424f851998-09-11 22:50:09 +00001129
Tim Peters2344fae2001-01-15 00:50:52 +00001130 def print_stack_trace(self):
1131 try:
1132 for frame_lineno in self.stack:
1133 self.print_stack_entry(frame_lineno)
1134 except KeyboardInterrupt:
1135 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001136
Tim Peters2344fae2001-01-15 00:50:52 +00001137 def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix):
1138 frame, lineno = frame_lineno
1139 if frame is self.curframe:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001140 print('>', end=' ', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001141 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001142 print(' ', end=' ', file=self.stdout)
1143 print(self.format_stack_entry(frame_lineno,
1144 prompt_prefix), file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001145
Guido van Rossum921c8241992-01-10 14:54:42 +00001146
Georg Brandl02053ee2010-07-18 10:11:03 +00001147 # Help methods (derived from docstring)
Guido van Rossum921c8241992-01-10 14:54:42 +00001148
Tim Peters2344fae2001-01-15 00:50:52 +00001149 def help_help(self):
1150 self.help_h()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001151
Tim Peters2344fae2001-01-15 00:50:52 +00001152 def help_h(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001153 print("""h(elp)
Tim Peters2344fae2001-01-15 00:50:52 +00001154Without argument, print the list of available commands.
1155With a command name as argument, print help about that command
Georg Brandl55353ca2010-07-19 08:02:46 +00001156"help pdb" shows the full pdb documentation
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001157"help exec" gives help on the ! command""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001158
Tim Peters2344fae2001-01-15 00:50:52 +00001159 def help_where(self):
1160 self.help_w()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001161
Tim Peters2344fae2001-01-15 00:50:52 +00001162 def help_w(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001163 print("""w(here)
Tim Peters2344fae2001-01-15 00:50:52 +00001164Print a stack trace, with the most recent frame at the bottom.
1165An arrow indicates the "current frame", which determines the
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001166context of most commands. 'bt' is an alias for this command.""", file=self.stdout)
Guido van Rossum6bd68352001-01-20 17:57:37 +00001167
1168 help_bt = help_w
Guido van Rossumb6775db1994-08-01 11:34:53 +00001169
Tim Peters2344fae2001-01-15 00:50:52 +00001170 def help_down(self):
1171 self.help_d()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001172
Tim Peters2344fae2001-01-15 00:50:52 +00001173 def help_d(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001174 print("""d(own)
Tim Peters2344fae2001-01-15 00:50:52 +00001175Move the current frame one level down in the stack trace
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001176(to a newer frame).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001177
Tim Peters2344fae2001-01-15 00:50:52 +00001178 def help_up(self):
1179 self.help_u()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001180
Tim Peters2344fae2001-01-15 00:50:52 +00001181 def help_u(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001182 print("""u(p)
Tim Peters2344fae2001-01-15 00:50:52 +00001183Move the current frame one level up in the stack trace
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001184(to an older frame).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001185
Tim Peters2344fae2001-01-15 00:50:52 +00001186 def help_break(self):
1187 self.help_b()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001188
Tim Peters2344fae2001-01-15 00:50:52 +00001189 def help_b(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001190 print("""b(reak) ([file:]lineno | function) [, condition]
Tim Peters2344fae2001-01-15 00:50:52 +00001191With a line number argument, set a break there in the current
1192file. With a function name, set a break at first executable line
1193of that function. Without argument, list all breaks. If a second
1194argument is present, it is a string specifying an expression
1195which must evaluate to true before the breakpoint is honored.
Guido van Rossumb6775db1994-08-01 11:34:53 +00001196
Tim Peters2344fae2001-01-15 00:50:52 +00001197The line number may be prefixed with a filename and a colon,
1198to specify a breakpoint in another file (probably one that
1199hasn't been loaded yet). The file is searched for on sys.path;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001200the .py suffix may be omitted.""", file=self.stdout)
Guido van Rossumb5699c71998-07-20 23:13:54 +00001201
Tim Peters2344fae2001-01-15 00:50:52 +00001202 def help_clear(self):
1203 self.help_cl()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001204
Tim Peters2344fae2001-01-15 00:50:52 +00001205 def help_cl(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001206 print("cl(ear) filename:lineno", file=self.stdout)
1207 print("""cl(ear) [bpnumber [bpnumber...]]
Tim Peters2344fae2001-01-15 00:50:52 +00001208With a space separated list of breakpoint numbers, clear
1209those breakpoints. Without argument, clear all breaks (but
1210first ask confirmation). With a filename:lineno argument,
Georg Brandld348b252008-01-05 20:00:55 +00001211clear all breaks at that line in that file.""", file=self.stdout)
Guido van Rossumb5699c71998-07-20 23:13:54 +00001212
Tim Peters2344fae2001-01-15 00:50:52 +00001213 def help_tbreak(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001214 print("""tbreak same arguments as break, but breakpoint is
1215removed when first hit.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001216
Tim Peters2344fae2001-01-15 00:50:52 +00001217 def help_enable(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001218 print("""enable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +00001219Enables the breakpoints given as a space separated list of
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001220bp numbers.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001221
Tim Peters2344fae2001-01-15 00:50:52 +00001222 def help_disable(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001223 print("""disable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +00001224Disables the breakpoints given as a space separated list of
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001225bp numbers.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001226
Tim Peters2344fae2001-01-15 00:50:52 +00001227 def help_ignore(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001228 print("""ignore bpnumber count
Tim Peters2344fae2001-01-15 00:50:52 +00001229Sets the ignore count for the given breakpoint number. A breakpoint
1230becomes active when the ignore count is zero. When non-zero, the
1231count is decremented each time the breakpoint is reached and the
1232breakpoint is not disabled and any associated condition evaluates
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001233to true.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001234
Tim Peters2344fae2001-01-15 00:50:52 +00001235 def help_condition(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001236 print("""condition bpnumber str_condition
Tim Peters2344fae2001-01-15 00:50:52 +00001237str_condition is a string specifying an expression which
1238must evaluate to true before the breakpoint is honored.
1239If str_condition is absent, any existing condition is removed;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001240i.e., the breakpoint is made unconditional.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001241
Tim Peters2344fae2001-01-15 00:50:52 +00001242 def help_step(self):
1243 self.help_s()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001244
Tim Peters2344fae2001-01-15 00:50:52 +00001245 def help_s(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001246 print("""s(tep)
Tim Peters2344fae2001-01-15 00:50:52 +00001247Execute the current line, stop at the first possible occasion
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001248(either in a function that is called or in the current function).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001249
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +00001250 def help_until(self):
1251 self.help_unt()
1252
1253 def help_unt(self):
1254 print("""unt(il)
1255Continue execution until the line with a number greater than the current
1256one is reached or until the current frame returns""")
1257
Tim Peters2344fae2001-01-15 00:50:52 +00001258 def help_next(self):
1259 self.help_n()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001260
Tim Peters2344fae2001-01-15 00:50:52 +00001261 def help_n(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001262 print("""n(ext)
Tim Peters2344fae2001-01-15 00:50:52 +00001263Continue execution until the next line in the current function
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001264is reached or it returns.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001265
Tim Peters2344fae2001-01-15 00:50:52 +00001266 def help_return(self):
1267 self.help_r()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001268
Tim Peters2344fae2001-01-15 00:50:52 +00001269 def help_r(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001270 print("""r(eturn)
1271Continue execution until the current function returns.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001272
Tim Peters2344fae2001-01-15 00:50:52 +00001273 def help_continue(self):
1274 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001275
Tim Peters2344fae2001-01-15 00:50:52 +00001276 def help_cont(self):
1277 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001278
Tim Peters2344fae2001-01-15 00:50:52 +00001279 def help_c(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001280 print("""c(ont(inue))
1281Continue execution, only stop when a breakpoint is encountered.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001282
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001283 def help_jump(self):
1284 self.help_j()
1285
1286 def help_j(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001287 print("""j(ump) lineno
1288Set the next line that will be executed.""", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001289
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001290 def help_debug(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001291 print("""debug code
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001292Enter a recursive debugger that steps through the code argument
1293(which is an arbitrary expression or statement to be executed
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001294in the current environment).""", file=self.stdout)
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001295
Tim Peters2344fae2001-01-15 00:50:52 +00001296 def help_list(self):
1297 self.help_l()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001298
Tim Peters2344fae2001-01-15 00:50:52 +00001299 def help_l(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001300 print("""l(ist) [first [,last]]
Tim Peters2344fae2001-01-15 00:50:52 +00001301List source code for the current file.
1302Without arguments, list 11 lines around the current line
1303or continue the previous listing.
1304With one argument, list 11 lines starting at that line.
1305With two arguments, list the given range;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001306if the second argument is less than the first, it is a count.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001307
Tim Peters2344fae2001-01-15 00:50:52 +00001308 def help_args(self):
1309 self.help_a()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001310
Tim Peters2344fae2001-01-15 00:50:52 +00001311 def help_a(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001312 print("""a(rgs)
1313Print the arguments of the current function.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001314
Tim Peters2344fae2001-01-15 00:50:52 +00001315 def help_p(self):
Georg Brandlc9879242007-09-04 07:07:56 +00001316 print("""p(rint) expression
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001317Print the value of the expression.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001318
Barry Warsaw210bd202002-11-05 22:40:20 +00001319 def help_pp(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001320 print("""pp expression
1321Pretty-print the value of the expression.""", file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001322
Tim Peters2344fae2001-01-15 00:50:52 +00001323 def help_exec(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001324 print("""(!) statement
Tim Peters2344fae2001-01-15 00:50:52 +00001325Execute the (one-line) statement in the context of
1326the current stack frame.
1327The exclamation point can be omitted unless the first word
1328of the statement resembles a debugger command.
1329To assign to a global variable you must always prefix the
1330command with a 'global' command, e.g.:
1331(Pdb) global list_options; list_options = ['-l']
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001332(Pdb)""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001333
Guido van Rossumd8faa362007-04-27 19:54:29 +00001334 def help_run(self):
1335 print("""run [args...]
1336Restart the debugged python program. If a string is supplied, it is
1337splitted with "shlex" and the result is used as the new sys.argv.
1338History, breakpoints, actions and debugger options are preserved.
1339"restart" is an alias for "run".""")
1340
1341 help_restart = help_run
1342
Tim Peters2344fae2001-01-15 00:50:52 +00001343 def help_quit(self):
1344 self.help_q()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001345
Tim Peters2344fae2001-01-15 00:50:52 +00001346 def help_q(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001347 print("""q(uit) or exit - Quit from the debugger.
1348The program being executed is aborted.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001349
Guido van Rossumd1c08f32002-04-15 00:48:24 +00001350 help_exit = help_q
1351
Tim Peters2344fae2001-01-15 00:50:52 +00001352 def help_whatis(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001353 print("""whatis arg
1354Prints the type of the argument.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001355
Tim Peters2344fae2001-01-15 00:50:52 +00001356 def help_EOF(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001357 print("""EOF
1358Handles the receipt of EOF as a command.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001359
Tim Peters2344fae2001-01-15 00:50:52 +00001360 def help_alias(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001361 print("""alias [name [command [parameter parameter ...] ]]
Tim Peters2344fae2001-01-15 00:50:52 +00001362Creates an alias called 'name' the executes 'command'. The command
1363must *not* be enclosed in quotes. Replaceable parameters are
1364indicated by %1, %2, and so on, while %* is replaced by all the
1365parameters. If no command is given, the current alias for name
1366is shown. If no name is given, all aliases are listed.
Guido van Rossum2424f851998-09-11 22:50:09 +00001367
Tim Peters2344fae2001-01-15 00:50:52 +00001368Aliases may be nested and can contain anything that can be
1369legally typed at the pdb prompt. Note! You *can* override
1370internal pdb commands with aliases! Those internal commands
1371are then hidden until the alias is removed. Aliasing is recursively
1372applied to the first word of the command line; all other words
1373in the line are left alone.
Guido van Rossum2424f851998-09-11 22:50:09 +00001374
Tim Peters2344fae2001-01-15 00:50:52 +00001375Some useful aliases (especially when placed in the .pdbrc file) are:
Guido van Rossum2424f851998-09-11 22:50:09 +00001376
Tim Peters2344fae2001-01-15 00:50:52 +00001377#Print instance variables (usage "pi classInst")
1378alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
Guido van Rossum2424f851998-09-11 22:50:09 +00001379
Tim Peters2344fae2001-01-15 00:50:52 +00001380#Print instance variables in self
1381alias ps pi self
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001382""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001383
Tim Peters2344fae2001-01-15 00:50:52 +00001384 def help_unalias(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001385 print("""unalias name
1386Deletes the specified alias.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001387
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001388 def help_commands(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001389 print("""commands [bpnumber]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001390(com) ...
1391(com) end
1392(Pdb)
1393
1394Specify a list of commands for breakpoint number bpnumber. The
1395commands themselves appear on the following lines. Type a line
1396containing just 'end' to terminate the commands.
1397
1398To remove all commands from a breakpoint, type commands and
1399follow it immediately with end; that is, give no commands.
1400
1401With no bpnumber argument, commands refers to the last
1402breakpoint set.
1403
1404You can use breakpoint commands to start your program up again.
1405Simply use the continue command, or step, or any other
1406command that resumes execution.
1407
1408Specifying any command resuming execution (currently continue,
1409step, next, return, jump, quit and their abbreviations) terminates
1410the command list (as if that command was immediately followed by end).
1411This is because any time you resume execution
1412(even with a simple next or step), you may encounter
1413another breakpoint--which could have its own command list, leading to
1414ambiguities about which list to execute.
1415
1416 If you use the 'silent' command in the command list, the
1417usual message about stopping at a breakpoint is not printed. This may
1418be desirable for breakpoints that are to print a specific message and
1419then continue. If none of the other commands print anything, you
1420see no sign that the breakpoint was reached.
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001421""", file=self.stdout)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001422
Tim Peters2344fae2001-01-15 00:50:52 +00001423 def help_pdb(self):
1424 help()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001425
Tim Peters2344fae2001-01-15 00:50:52 +00001426 def lookupmodule(self, filename):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001427 """Helper function for break/clear parsing -- may be overridden.
1428
1429 lookupmodule() translates (possibly incomplete) file or module name
1430 into an absolute file name.
1431 """
1432 if os.path.isabs(filename) and os.path.exists(filename):
Tim Peterse718f612004-10-12 21:51:32 +00001433 return filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001434 f = os.path.join(sys.path[0], filename)
1435 if os.path.exists(f) and self.canonic(f) == self.mainpyfile:
1436 return f
Tim Peters2344fae2001-01-15 00:50:52 +00001437 root, ext = os.path.splitext(filename)
1438 if ext == '':
1439 filename = filename + '.py'
1440 if os.path.isabs(filename):
1441 return filename
1442 for dirname in sys.path:
1443 while os.path.islink(dirname):
1444 dirname = os.readlink(dirname)
1445 fullname = os.path.join(dirname, filename)
1446 if os.path.exists(fullname):
1447 return fullname
1448 return None
Guido van Rossumb5699c71998-07-20 23:13:54 +00001449
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001450 def _runscript(self, filename):
Guido van Rossumd8faa362007-04-27 19:54:29 +00001451 # The script has to run in __main__ namespace (or imports from
1452 # __main__ will break).
1453 #
1454 # So we clear up the __main__ and set several special variables
1455 # (this gets rid of pdb's globals and cleans old variables on restarts).
1456 import __main__
1457 __main__.__dict__.clear()
1458 __main__.__dict__.update({"__name__" : "__main__",
1459 "__file__" : filename,
1460 "__builtins__": __builtins__,
1461 })
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001462
1463 # When bdb sets tracing, a number of call and line events happens
1464 # BEFORE debugger even reaches user's code (and the exact sequence of
1465 # events depends on python version). So we take special measures to
1466 # avoid stopping before we reach the main script (see user_line and
1467 # user_call for details).
1468 self._wait_for_mainpyfile = 1
1469 self.mainpyfile = self.canonic(filename)
1470 self._user_requested_quit = 0
Georg Brandld07ac642009-08-13 07:50:57 +00001471 with open(filename, "rb") as fp:
1472 statement = "exec(compile(%r, %r, 'exec'))" % \
1473 (fp.read(), self.mainpyfile)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001474 self.run(statement)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001475
Guido van Rossum35771131992-09-08 11:59:04 +00001476# Simplified interface
1477
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001478def run(statement, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001479 Pdb().run(statement, globals, locals)
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001480
1481def runeval(expression, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001482 return Pdb().runeval(expression, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001483
1484def runctx(statement, globals, locals):
Tim Peters2344fae2001-01-15 00:50:52 +00001485 # B/W compatibility
1486 run(statement, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001487
Raymond Hettinger2ef7e6c2004-10-24 00:32:24 +00001488def runcall(*args, **kwds):
1489 return Pdb().runcall(*args, **kwds)
Guido van Rossum4e160981992-09-02 20:43:20 +00001490
Guido van Rossumb6775db1994-08-01 11:34:53 +00001491def set_trace():
Johannes Gijsbers84a6c202004-11-07 11:35:30 +00001492 Pdb().set_trace(sys._getframe().f_back)
Guido van Rossum35771131992-09-08 11:59:04 +00001493
1494# Post-Mortem interface
1495
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001496def post_mortem(t=None):
1497 # handling the default
1498 if t is None:
1499 # sys.exc_info() returns (type, value, traceback) if an exception is
1500 # being handled, otherwise it returns None
1501 t = sys.exc_info()[2]
1502 if t is None:
1503 raise ValueError("A valid traceback must be passed if no "
1504 "exception is being handled")
1505
Tim Peters2344fae2001-01-15 00:50:52 +00001506 p = Pdb()
1507 p.reset()
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001508 p.interaction(None, t)
Guido van Rossum35771131992-09-08 11:59:04 +00001509
1510def pm():
Tim Peters2344fae2001-01-15 00:50:52 +00001511 post_mortem(sys.last_traceback)
Guido van Rossum35771131992-09-08 11:59:04 +00001512
1513
1514# Main program for testing
1515
Guido van Rossum23efba41992-01-27 16:58:47 +00001516TESTCMD = 'import x; x.main()'
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001517
Guido van Rossum921c8241992-01-10 14:54:42 +00001518def test():
Tim Peters2344fae2001-01-15 00:50:52 +00001519 run(TESTCMD)
Guido van Rossume61fa0a1993-10-22 13:56:35 +00001520
1521# print help
1522def help():
Georg Brandl02053ee2010-07-18 10:11:03 +00001523 import pydoc
1524 pydoc.pager(__doc__)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001525
Georg Brandle0230912010-07-30 08:29:39 +00001526_usage = """\
1527usage: pdb.py [-c command] ... pyfile [arg] ...
1528
1529Debug the Python program given by pyfile.
1530
1531Initial commands are read from .pdbrc files in your home directory
1532and in the current directory, if they exist. Commands supplied with
1533-c are executed after commands from .pdbrc files.
1534
1535To let the script run until an exception occurs, use "-c continue".
Georg Brandl2dfec552010-07-30 08:43:32 +00001536To let the script run up to a given line X in the debugged file, use
1537"-c 'until X'"."""
Georg Brandle0230912010-07-30 08:29:39 +00001538
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001539def main():
Georg Brandle0230912010-07-30 08:29:39 +00001540 import getopt
1541
1542 opts, args = getopt.getopt(sys.argv[1:], 'hc:', ['--help', '--command='])
1543
1544 if not args:
1545 print(_usage)
Tim Peters2344fae2001-01-15 00:50:52 +00001546 sys.exit(2)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001547
Georg Brandle0230912010-07-30 08:29:39 +00001548 commands = []
1549 for opt, optarg in opts:
1550 if opt in ['-h', '--help']:
1551 print(_usage)
1552 sys.exit()
1553 elif opt in ['-c', '--command']:
1554 commands.append(optarg)
1555
1556 mainpyfile = args[0] # Get script filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001557 if not os.path.exists(mainpyfile):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001558 print('Error:', mainpyfile, 'does not exist')
Tim Peters2344fae2001-01-15 00:50:52 +00001559 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001560
Georg Brandle0230912010-07-30 08:29:39 +00001561 sys.argv[:] = args # Hide "pdb.py" and pdb options from argument list
Guido van Rossumec577d51996-09-10 17:39:34 +00001562
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001563 # Replace pdb's dir with script's dir in front of module search path.
1564 sys.path[0] = os.path.dirname(mainpyfile)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001565
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001566 # Note on saving/restoring sys.argv: it's a good idea when sys.argv was
1567 # modified by the script being debugged. It's a bad idea when it was
Georg Brandl3078df02009-05-05 09:11:31 +00001568 # changed by the user from the command line. There is a "restart" command
1569 # which allows explicit specification of command line arguments.
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001570 pdb = Pdb()
Georg Brandle0230912010-07-30 08:29:39 +00001571 pdb.rcLines.extend(commands)
Georg Brandl1e30bd32010-07-30 07:21:26 +00001572 while True:
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001573 try:
1574 pdb._runscript(mainpyfile)
1575 if pdb._user_requested_quit:
1576 break
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001577 print("The program finished and will be restarted")
Guido van Rossumd8faa362007-04-27 19:54:29 +00001578 except Restart:
1579 print("Restarting", mainpyfile, "with arguments:")
Georg Brandle0230912010-07-30 08:29:39 +00001580 print("\t" + " ".join(args))
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001581 except SystemExit:
1582 # In most cases SystemExit does not warrant a post-mortem session.
Georg Brandle0230912010-07-30 08:29:39 +00001583 print("The program exited via sys.exit(). Exit status:", end=' ')
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001584 print(sys.exc_info()[1])
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001585 except:
1586 traceback.print_exc()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001587 print("Uncaught exception. Entering post mortem debugging")
1588 print("Running 'cont' or 'step' will restart the program")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001589 t = sys.exc_info()[2]
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001590 pdb.interaction(None, t)
Georg Brandl3078df02009-05-05 09:11:31 +00001591 print("Post mortem debugger finished. The " + mainpyfile +
1592 " will be restarted")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001593
1594
1595# When invoked as main program, invoke the debugger on a script
Guido van Rossumd8faa362007-04-27 19:54:29 +00001596if __name__ == '__main__':
1597 import pdb
1598 pdb.main()