blob: e62f91368bd8072bd7260c03365f9b1a1795f483 [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
Georg Brandl26a0f872010-07-30 08:45:26 +0000150j(ump) lineno
151 Set the next line that will be executed. Only available in
152 the bottom-most frame. This lets you jump back and execute
153 code again, or jump forward to skip code that you don't want
154 to run.
155
156 It should be noted that not all jumps are allowed -- for
157 instance it is not possible to jump into the middle of a
158 for loop or out of a finally clause.
159
Georg Brandl02053ee2010-07-18 10:11:03 +0000160r(eturn)
161 Continue execution until the current function returns.
162
163run [args...]
164 Restart the debugged python program. If a string is supplied
165 it is splitted with "shlex", and the result is used as the new
166 sys.argv. History, breakpoints, actions and debugger options
167 are preserved. "restart" is an alias for "run".
168
169c(ont(inue))
170 Continue execution, only stop when a breakpoint is encountered.
171
172l(ist) [first [,last]]
173 List source code for the current file.
174 Without arguments, list 11 lines around the current line
175 or continue the previous listing.
Georg Brandla91a94b2010-07-30 07:14:01 +0000176 With . as argument, list 11 lines around the current line.
Georg Brandl02053ee2010-07-18 10:11:03 +0000177 With one argument, list 11 lines starting at that line.
178 With two arguments, list the given range;
179 if the second argument is less than the first, it is a count.
180
181a(rgs)
182 Print the argument list of the current function.
183
184p expression
185 Print the value of the expression.
186
187(!) statement
188 Execute the (one-line) statement in the context of the current
189 stack frame. The exclamation point can be omitted unless the
190 first word of the statement resembles a debugger command. To
191 assign to a global variable you must always prefix the command
192 with a 'global' command, e.g.:
193 (Pdb) global list_options; list_options = ['-l']
194 (Pdb)
195
196
197whatis arg
198 Print the type of the argument.
199
200alias [name [command]]
201 Creates an alias called 'name' that executes 'command'. The
202 command must *not* be enclosed in quotes. Replaceable
203 parameters can be indicated by %1, %2, and so on, while %* is
204 replaced by all the parameters. If no command is given, the
205 current alias for name is shown. If no name is given, all
206 aliases are listed.
207
208 Aliases may be nested and can contain anything that can be
209 legally typed at the pdb prompt. Note! You *can* override
210 internal pdb commands with aliases! Those internal commands
211 are then hidden until the alias is removed. Aliasing is
212 recursively applied to the first word of the command line; all
213 other words in the line are left alone.
214
215 As an example, here are two useful aliases (especially when
216 placed in the .pdbrc file):
217
218 # Print instance variables (usage "pi classInst")
219 alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
220 # Print instance variables in self
221 alias ps pi self
222
223unalias name
224 Delete the specified alias.
225
226q(uit)
227 Quit from the debugger. The program being executed is aborted.
228"""
Guido van Rossum921c8241992-01-10 14:54:42 +0000229
Guido van Rossum921c8241992-01-10 14:54:42 +0000230import sys
231import linecache
Guido van Rossum23efba41992-01-27 16:58:47 +0000232import cmd
233import bdb
Alexandre Vassalotti1f2ba4b2008-05-16 07:12:44 +0000234from reprlib import Repr
Guido van Rossumb5699c71998-07-20 23:13:54 +0000235import os
Barry Warsaw2bee8fe1999-09-09 16:32:41 +0000236import re
Barry Warsaw210bd202002-11-05 22:40:20 +0000237import pprint
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000238import traceback
Guido van Rossumd8faa362007-04-27 19:54:29 +0000239
240
241class Restart(Exception):
242 """Causes a debugger to be restarted for the debugged python program."""
243 pass
244
Guido van Rossumef1b41b2002-09-10 21:57:14 +0000245# Create a custom safe Repr instance and increase its maxstring.
246# The default of 30 truncates error messages too easily.
247_repr = Repr()
248_repr.maxstring = 200
249_saferepr = _repr.repr
250
Skip Montanaro352674d2001-02-07 23:14:30 +0000251__all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace",
252 "post_mortem", "help"]
253
Barry Warsaw2bee8fe1999-09-09 16:32:41 +0000254def find_function(funcname, filename):
Thomas Wouters89f507f2006-12-13 04:49:30 +0000255 cre = re.compile(r'def\s+%s\s*[(]' % re.escape(funcname))
Tim Peters2344fae2001-01-15 00:50:52 +0000256 try:
257 fp = open(filename)
258 except IOError:
259 return None
260 # consumer of this info expects the first line to be 1
261 lineno = 1
262 answer = None
263 while 1:
264 line = fp.readline()
265 if line == '':
266 break
267 if cre.match(line):
268 answer = funcname, filename, lineno
269 break
270 lineno = lineno + 1
271 fp.close()
272 return answer
Guido van Rossum921c8241992-01-10 14:54:42 +0000273
274
Guido van Rossuma558e371994-11-10 22:27:35 +0000275# Interaction prompt line will separate file and call info from code
276# text using value of line_prefix string. A newline and arrow may
277# be to your liking. You can set it once pdb is imported using the
278# command "pdb.line_prefix = '\n% '".
Tim Peters2344fae2001-01-15 00:50:52 +0000279# line_prefix = ': ' # Use this to get the old situation back
280line_prefix = '\n-> ' # Probably a better default
Guido van Rossuma558e371994-11-10 22:27:35 +0000281
Guido van Rossum23efba41992-01-27 16:58:47 +0000282class Pdb(bdb.Bdb, cmd.Cmd):
Guido van Rossum2424f851998-09-11 22:50:09 +0000283
Georg Brandl243ad662009-05-05 09:00:19 +0000284 def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None):
285 bdb.Bdb.__init__(self, skip=skip)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000286 cmd.Cmd.__init__(self, completekey, stdin, stdout)
287 if stdout:
288 self.use_rawinput = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000289 self.prompt = '(Pdb) '
290 self.aliases = {}
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000291 self.mainpyfile = ''
292 self._wait_for_mainpyfile = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000293 # Try to load readline if it exists
294 try:
295 import readline
296 except ImportError:
297 pass
Guido van Rossum2424f851998-09-11 22:50:09 +0000298
Tim Peters2344fae2001-01-15 00:50:52 +0000299 # Read $HOME/.pdbrc and ./.pdbrc
300 self.rcLines = []
Raymond Hettinger54f02222002-06-01 14:18:47 +0000301 if 'HOME' in os.environ:
Tim Peters2344fae2001-01-15 00:50:52 +0000302 envHome = os.environ['HOME']
303 try:
304 rcFile = open(os.path.join(envHome, ".pdbrc"))
305 except IOError:
306 pass
307 else:
308 for line in rcFile.readlines():
309 self.rcLines.append(line)
310 rcFile.close()
311 try:
312 rcFile = open(".pdbrc")
313 except IOError:
314 pass
315 else:
316 for line in rcFile.readlines():
317 self.rcLines.append(line)
318 rcFile.close()
Guido van Rossum23efba41992-01-27 16:58:47 +0000319
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000320 self.commands = {} # associates a command list to breakpoint numbers
Benjamin Petersond23f8222009-04-05 19:13:16 +0000321 self.commands_doprompt = {} # for each bp num, tells if the prompt
322 # must be disp. after execing the cmd list
323 self.commands_silent = {} # for each bp num, tells if the stack trace
324 # must be disp. after execing the cmd list
325 self.commands_defining = False # True while in the process of defining
326 # a command list
327 self.commands_bnum = None # The breakpoint number for which we are
328 # defining a list
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000329
Tim Peters2344fae2001-01-15 00:50:52 +0000330 def reset(self):
331 bdb.Bdb.reset(self)
332 self.forget()
Guido van Rossum23efba41992-01-27 16:58:47 +0000333
Tim Peters2344fae2001-01-15 00:50:52 +0000334 def forget(self):
335 self.lineno = None
336 self.stack = []
337 self.curindex = 0
338 self.curframe = None
Guido van Rossum2424f851998-09-11 22:50:09 +0000339
Tim Peters2344fae2001-01-15 00:50:52 +0000340 def setup(self, f, t):
341 self.forget()
342 self.stack, self.curindex = self.get_stack(f, t)
343 self.curframe = self.stack[self.curindex][0]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000344 # The f_locals dictionary is updated from the actual frame
345 # locals whenever the .f_locals accessor is called, so we
346 # cache it here to ensure that modifications are not overwritten.
347 self.curframe_locals = self.curframe.f_locals
Georg Brandle0230912010-07-30 08:29:39 +0000348 return self.execRcLines()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000349
Tim Peters2344fae2001-01-15 00:50:52 +0000350 # Can be executed earlier than 'setup' if desired
351 def execRcLines(self):
Georg Brandle0230912010-07-30 08:29:39 +0000352 if not self.rcLines:
353 return
354 # local copy because of recursion
355 rcLines = self.rcLines
356 rcLines.reverse()
357 # execute every line only once
358 self.rcLines = []
359 while rcLines:
360 line = rcLines.pop().strip()
361 if line and line[0] != '#':
362 if self.onecmd(line):
363 # if onecmd returns True, the command wants to exit
364 # from the interaction, save leftover rc lines
365 # to execute before next interaction
366 self.rcLines += reversed(rcLines)
367 return True
Guido van Rossum2424f851998-09-11 22:50:09 +0000368
Tim Peters280488b2002-08-23 18:19:30 +0000369 # Override Bdb methods
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000370
371 def user_call(self, frame, argument_list):
372 """This method is called when there is the remote possibility
373 that we ever need to stop in this function."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000374 if self._wait_for_mainpyfile:
375 return
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000376 if self.stop_here(frame):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000377 print('--Call--', file=self.stdout)
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000378 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000379
Tim Peters2344fae2001-01-15 00:50:52 +0000380 def user_line(self, frame):
381 """This function is called when we stop or break at this line."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000382 if self._wait_for_mainpyfile:
383 if (self.mainpyfile != self.canonic(frame.f_code.co_filename)
384 or frame.f_lineno<= 0):
385 return
386 self._wait_for_mainpyfile = 0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000387 if self.bp_commands(frame):
388 self.interaction(frame, None)
389
Georg Brandle0230912010-07-30 08:29:39 +0000390 def bp_commands(self, frame):
Georg Brandl3078df02009-05-05 09:11:31 +0000391 """Call every command that was set for the current active breakpoint
392 (if there is one).
393
394 Returns True if the normal interaction function must be called,
395 False otherwise."""
396 # self.currentbp is set in bdb in Bdb.break_here if a breakpoint was hit
397 if getattr(self, "currentbp", False) and \
398 self.currentbp in self.commands:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000399 currentbp = self.currentbp
400 self.currentbp = 0
401 lastcmd_back = self.lastcmd
402 self.setup(frame, None)
403 for line in self.commands[currentbp]:
404 self.onecmd(line)
405 self.lastcmd = lastcmd_back
406 if not self.commands_silent[currentbp]:
407 self.print_stack_entry(self.stack[self.curindex])
408 if self.commands_doprompt[currentbp]:
409 self.cmdloop()
410 self.forget()
411 return
412 return 1
Guido van Rossum9e1ee971997-07-11 13:43:53 +0000413
Tim Peters2344fae2001-01-15 00:50:52 +0000414 def user_return(self, frame, return_value):
415 """This function is called when a return trap is set here."""
416 frame.f_locals['__return__'] = return_value
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000417 print('--Return--', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000418 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000419
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000420 def user_exception(self, frame, exc_info):
Tim Peters2344fae2001-01-15 00:50:52 +0000421 """This function is called if an exception occurs,
422 but only if we are to stop at or just below this level."""
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000423 exc_type, exc_value, exc_traceback = exc_info
Tim Peters2344fae2001-01-15 00:50:52 +0000424 frame.f_locals['__exception__'] = exc_type, exc_value
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000425 exc_type_name = exc_type.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000426 print(exc_type_name + ':', _saferepr(exc_value), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000427 self.interaction(frame, exc_traceback)
Guido van Rossum2424f851998-09-11 22:50:09 +0000428
Tim Peters2344fae2001-01-15 00:50:52 +0000429 # General interaction function
430
431 def interaction(self, frame, traceback):
Georg Brandle0230912010-07-30 08:29:39 +0000432 if self.setup(frame, traceback):
433 # no interaction desired at this time (happens if .pdbrc contains
434 # a command like "continue")
435 self.forget()
436 return
Tim Peters2344fae2001-01-15 00:50:52 +0000437 self.print_stack_entry(self.stack[self.curindex])
438 self.cmdloop()
439 self.forget()
440
Benjamin Petersond23f8222009-04-05 19:13:16 +0000441 def displayhook(self, obj):
442 """Custom displayhook for the exec in default(), which prevents
443 assignment of the _ variable in the builtins.
444 """
Georg Brandl9fa2e022009-09-16 16:40:45 +0000445 # reproduce the behavior of the standard displayhook, not printing None
446 if obj is not None:
447 print(repr(obj))
Benjamin Petersond23f8222009-04-05 19:13:16 +0000448
Tim Peters2344fae2001-01-15 00:50:52 +0000449 def default(self, line):
450 if line[:1] == '!': line = line[1:]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000451 locals = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000452 globals = self.curframe.f_globals
453 try:
454 code = compile(line + '\n', '<stdin>', 'single')
Christian Heimes679db4a2008-01-18 09:56:22 +0000455 save_stdout = sys.stdout
456 save_stdin = sys.stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000457 save_displayhook = sys.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000458 try:
459 sys.stdin = self.stdin
460 sys.stdout = self.stdout
Benjamin Petersond23f8222009-04-05 19:13:16 +0000461 sys.displayhook = self.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000462 exec(code, globals, locals)
463 finally:
464 sys.stdout = save_stdout
465 sys.stdin = save_stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000466 sys.displayhook = save_displayhook
Tim Peters2344fae2001-01-15 00:50:52 +0000467 except:
468 t, v = sys.exc_info()[:2]
469 if type(t) == type(''):
470 exc_type_name = t
471 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000472 print('***', exc_type_name + ':', v, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000473
474 def precmd(self, line):
475 """Handle alias expansion and ';;' separator."""
Guido van Rossum08454592002-07-12 13:10:53 +0000476 if not line.strip():
Tim Peters2344fae2001-01-15 00:50:52 +0000477 return line
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000478 args = line.split()
Raymond Hettinger54f02222002-06-01 14:18:47 +0000479 while args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000480 line = self.aliases[args[0]]
481 ii = 1
482 for tmpArg in args[1:]:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000483 line = line.replace("%" + str(ii),
Tim Peters2344fae2001-01-15 00:50:52 +0000484 tmpArg)
485 ii = ii + 1
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000486 line = line.replace("%*", ' '.join(args[1:]))
487 args = line.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000488 # split into ';;' separated commands
489 # unless it's an alias command
490 if args[0] != 'alias':
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000491 marker = line.find(';;')
Tim Peters2344fae2001-01-15 00:50:52 +0000492 if marker >= 0:
493 # queue up everything after marker
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000494 next = line[marker+2:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000495 self.cmdqueue.append(next)
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000496 line = line[:marker].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000497 return line
498
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000499 def onecmd(self, line):
500 """Interpret the argument as though it had been typed in response
501 to the prompt.
502
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000503 Checks whether this line is typed at the normal prompt or in
504 a breakpoint command list definition.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000505 """
506 if not self.commands_defining:
507 return cmd.Cmd.onecmd(self, line)
508 else:
509 return self.handle_command_def(line)
510
511 def handle_command_def(self,line):
Georg Brandl44f8bf92010-07-30 08:54:49 +0000512 """Handles one command line during command list definition."""
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000513 cmd, arg, line = self.parseline(line)
Georg Brandl44f8bf92010-07-30 08:54:49 +0000514 if not cmd:
515 return
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000516 if cmd == 'silent':
517 self.commands_silent[self.commands_bnum] = True
518 return # continue to handle other cmd def in the cmd list
519 elif cmd == 'end':
520 self.cmdqueue = []
521 return 1 # end of cmd list
522 cmdlist = self.commands[self.commands_bnum]
Georg Brandl44f8bf92010-07-30 08:54:49 +0000523 if arg:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000524 cmdlist.append(cmd+' '+arg)
525 else:
526 cmdlist.append(cmd)
527 # Determine if we must stop
528 try:
529 func = getattr(self, 'do_' + cmd)
530 except AttributeError:
531 func = self.default
Georg Brandl3078df02009-05-05 09:11:31 +0000532 # one of the resuming commands
533 if func.__name__ in self.commands_resuming:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000534 self.commands_doprompt[self.commands_bnum] = False
535 self.cmdqueue = []
536 return 1
537 return
538
Tim Peters2344fae2001-01-15 00:50:52 +0000539 # Command definitions, called by cmdloop()
540 # The argument is the remaining string on the command line
541 # Return true to exit from the command loop
542
543 do_h = cmd.Cmd.do_help
544
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000545 def do_commands(self, arg):
Georg Brandl3078df02009-05-05 09:11:31 +0000546 """Defines a list of commands associated to a breakpoint.
547
548 Those commands will be executed whenever the breakpoint causes
549 the program to stop execution."""
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000550 if not arg:
551 bnum = len(bdb.Breakpoint.bpbynumber)-1
552 else:
553 try:
554 bnum = int(arg)
555 except:
Georg Brandl3078df02009-05-05 09:11:31 +0000556 print("Usage : commands [bnum]\n ...\n end",
557 file=self.stdout)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000558 return
559 self.commands_bnum = bnum
560 self.commands[bnum] = []
561 self.commands_doprompt[bnum] = True
562 self.commands_silent[bnum] = False
563 prompt_back = self.prompt
564 self.prompt = '(com) '
565 self.commands_defining = True
Georg Brandl44f8bf92010-07-30 08:54:49 +0000566 try:
567 self.cmdloop()
568 finally:
569 self.commands_defining = False
570 self.prompt = prompt_back
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000571
Tim Peters2344fae2001-01-15 00:50:52 +0000572 def do_break(self, arg, temporary = 0):
573 # break [ ([filename:]lineno | function) [, "condition"] ]
574 if not arg:
575 if self.breaks: # There's at least one
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000576 print("Num Type Disp Enb Where", file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000577 for bp in bdb.Breakpoint.bpbynumber:
578 if bp:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000579 bp.bpprint(self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000580 return
581 # parse arguments; comma has lowest precedence
582 # and cannot occur in filename
583 filename = None
584 lineno = None
585 cond = None
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000586 comma = arg.find(',')
Tim Peters2344fae2001-01-15 00:50:52 +0000587 if comma > 0:
588 # parse stuff after comma: "condition"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000589 cond = arg[comma+1:].lstrip()
590 arg = arg[:comma].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000591 # parse stuff before comma: [filename:]lineno | function
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000592 colon = arg.rfind(':')
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000593 funcname = None
Tim Peters2344fae2001-01-15 00:50:52 +0000594 if colon >= 0:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000595 filename = arg[:colon].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000596 f = self.lookupmodule(filename)
597 if not f:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000598 print('*** ', repr(filename), end=' ', file=self.stdout)
599 print('not found from sys.path', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000600 return
601 else:
602 filename = f
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000603 arg = arg[colon+1:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000604 try:
605 lineno = int(arg)
Guido van Rossumb940e112007-01-10 16:19:56 +0000606 except ValueError as msg:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000607 print('*** Bad lineno:', arg, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000608 return
609 else:
610 # no colon; can be lineno or function
611 try:
612 lineno = int(arg)
613 except ValueError:
614 try:
615 func = eval(arg,
616 self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +0000617 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000618 except:
619 func = arg
620 try:
Christian Heimesff737952007-11-27 10:40:20 +0000621 if hasattr(func, '__func__'):
622 func = func.__func__
Neal Norwitz221085d2007-02-25 20:55:47 +0000623 code = func.__code__
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000624 #use co_name to identify the bkpt (function names
625 #could be aliased, but co_name is invariant)
626 funcname = code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000627 lineno = code.co_firstlineno
628 filename = code.co_filename
629 except:
630 # last thing to try
631 (ok, filename, ln) = self.lineinfo(arg)
632 if not ok:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000633 print('*** The specified object', end=' ', file=self.stdout)
634 print(repr(arg), end=' ', file=self.stdout)
635 print('is not a function', file=self.stdout)
636 print('or was not found along sys.path.', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000637 return
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000638 funcname = ok # ok contains a function name
Tim Peters2344fae2001-01-15 00:50:52 +0000639 lineno = int(ln)
640 if not filename:
641 filename = self.defaultFile()
642 # Check for reasonable breakpoint
643 line = self.checkline(filename, lineno)
644 if line:
645 # now set the break point
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000646 err = self.set_break(filename, line, temporary, cond, funcname)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000647 if err: print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000648 else:
649 bp = self.get_breaks(filename, line)[-1]
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000650 print("Breakpoint %d at %s:%d" % (bp.number,
Thomas Wouters477c8d52006-05-27 19:21:47 +0000651 bp.file,
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000652 bp.line), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000653
654 # To be overridden in derived debuggers
655 def defaultFile(self):
656 """Produce a reasonable default."""
657 filename = self.curframe.f_code.co_filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000658 if filename == '<string>' and self.mainpyfile:
659 filename = self.mainpyfile
Tim Peters2344fae2001-01-15 00:50:52 +0000660 return filename
661
662 do_b = do_break
663
664 def do_tbreak(self, arg):
665 self.do_break(arg, 1)
666
667 def lineinfo(self, identifier):
668 failed = (None, None, None)
669 # Input is identifier, may be in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000670 idstring = identifier.split("'")
Tim Peters2344fae2001-01-15 00:50:52 +0000671 if len(idstring) == 1:
672 # not in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000673 id = idstring[0].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000674 elif len(idstring) == 3:
675 # quoted
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000676 id = idstring[1].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000677 else:
678 return failed
679 if id == '': return failed
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000680 parts = id.split('.')
Tim Peters2344fae2001-01-15 00:50:52 +0000681 # Protection for derived debuggers
682 if parts[0] == 'self':
683 del parts[0]
684 if len(parts) == 0:
685 return failed
686 # Best first guess at file to look at
687 fname = self.defaultFile()
688 if len(parts) == 1:
689 item = parts[0]
690 else:
691 # More than one part.
692 # First is module, second is method/class
693 f = self.lookupmodule(parts[0])
694 if f:
695 fname = f
696 item = parts[1]
697 answer = find_function(item, fname)
698 return answer or failed
699
700 def checkline(self, filename, lineno):
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000701 """Check whether specified line seems to be executable.
Tim Peters2344fae2001-01-15 00:50:52 +0000702
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000703 Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank
704 line or EOF). Warning: testing is not comprehensive.
705 """
Georg Brandl1e30bd32010-07-30 07:21:26 +0000706 # this method should be callable before starting debugging, so default
707 # to "no globals" if there is no current frame
708 globs = self.curframe.f_globals if hasattr(self, 'curframe') else None
709 line = linecache.getline(filename, lineno, globs)
Tim Peters2344fae2001-01-15 00:50:52 +0000710 if not line:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000711 print('End of file', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000712 return 0
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000713 line = line.strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000714 # Don't allow setting breakpoint at a blank line
Guido van Rossum08454592002-07-12 13:10:53 +0000715 if (not line or (line[0] == '#') or
716 (line[:3] == '"""') or line[:3] == "'''"):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000717 print('*** Blank or comment', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000718 return 0
Tim Peters2344fae2001-01-15 00:50:52 +0000719 return lineno
720
721 def do_enable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000722 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000723 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000724 try:
725 i = int(i)
726 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000727 print('Breakpoint index %r is not a number' % i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000728 continue
729
730 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000731 print('No breakpoint numbered', i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000732 continue
733
734 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000735 if bp:
736 bp.enable()
737
738 def do_disable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000739 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000740 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000741 try:
742 i = int(i)
743 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000744 print('Breakpoint index %r is not a number' % i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000745 continue
Tim Petersf545baa2003-06-15 23:26:30 +0000746
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000747 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000748 print('No breakpoint numbered', i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000749 continue
750
751 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000752 if bp:
753 bp.disable()
754
755 def do_condition(self, arg):
756 # arg is breakpoint number and condition
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000757 args = arg.split(' ', 1)
Thomas Woutersb2137042007-02-01 18:02:27 +0000758 try:
759 bpnum = int(args[0].strip())
760 except ValueError:
761 # something went wrong
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000762 print('Breakpoint index %r is not a number' % args[0], file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000763 return
Tim Peters2344fae2001-01-15 00:50:52 +0000764 try:
765 cond = args[1]
766 except:
767 cond = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000768 try:
769 bp = bdb.Breakpoint.bpbynumber[bpnum]
770 except IndexError:
Neal Norwitz752abd02008-05-13 04:55:24 +0000771 print('Breakpoint index %r is not valid' % args[0],
772 file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000773 return
Tim Peters2344fae2001-01-15 00:50:52 +0000774 if bp:
775 bp.cond = cond
776 if not cond:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000777 print('Breakpoint', bpnum, end=' ', file=self.stdout)
778 print('is now unconditional.', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000779
780 def do_ignore(self,arg):
781 """arg is bp number followed by ignore count."""
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000782 args = arg.split()
Thomas Woutersb2137042007-02-01 18:02:27 +0000783 try:
784 bpnum = int(args[0].strip())
785 except ValueError:
786 # something went wrong
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000787 print('Breakpoint index %r is not a number' % args[0], file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000788 return
Tim Peters2344fae2001-01-15 00:50:52 +0000789 try:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000790 count = int(args[1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000791 except:
792 count = 0
Guido van Rossumd8faa362007-04-27 19:54:29 +0000793 try:
794 bp = bdb.Breakpoint.bpbynumber[bpnum]
795 except IndexError:
Neal Norwitz752abd02008-05-13 04:55:24 +0000796 print('Breakpoint index %r is not valid' % args[0],
797 file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000798 return
Tim Peters2344fae2001-01-15 00:50:52 +0000799 if bp:
800 bp.ignore = count
Guido van Rossum08454592002-07-12 13:10:53 +0000801 if count > 0:
Tim Peters2344fae2001-01-15 00:50:52 +0000802 reply = 'Will ignore next '
Guido van Rossum08454592002-07-12 13:10:53 +0000803 if count > 1:
Tim Peters2344fae2001-01-15 00:50:52 +0000804 reply = reply + '%d crossings' % count
805 else:
806 reply = reply + '1 crossing'
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000807 print(reply + ' of breakpoint %d.' % bpnum, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000808 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000809 print('Will stop next time breakpoint', end=' ', file=self.stdout)
810 print(bpnum, 'is reached.', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000811
812 def do_clear(self, arg):
813 """Three possibilities, tried in this order:
814 clear -> clear all breaks, ask for confirmation
815 clear file:lineno -> clear all breaks at file:lineno
816 clear bpno bpno ... -> clear breakpoints by number"""
817 if not arg:
818 try:
Guido van Rossumc5b6ab02007-05-27 09:19:52 +0000819 reply = input('Clear all breaks? ')
Tim Peters2344fae2001-01-15 00:50:52 +0000820 except EOFError:
821 reply = 'no'
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000822 reply = reply.strip().lower()
Tim Peters2344fae2001-01-15 00:50:52 +0000823 if reply in ('y', 'yes'):
824 self.clear_all_breaks()
825 return
826 if ':' in arg:
827 # Make sure it works for "clear C:\foo\bar.py:12"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000828 i = arg.rfind(':')
Tim Peters2344fae2001-01-15 00:50:52 +0000829 filename = arg[:i]
830 arg = arg[i+1:]
831 try:
832 lineno = int(arg)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000833 except ValueError:
Tim Peters2344fae2001-01-15 00:50:52 +0000834 err = "Invalid line number (%s)" % arg
835 else:
836 err = self.clear_break(filename, lineno)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000837 if err: print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000838 return
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000839 numberlist = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000840 for i in numberlist:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000841 try:
842 i = int(i)
843 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000844 print('Breakpoint index %r is not a number' % i, file=self.stdout)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000845 continue
846
Georg Brandl6d2b3462005-08-24 07:36:17 +0000847 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000848 print('No breakpoint numbered', i, file=self.stdout)
Georg Brandl6d2b3462005-08-24 07:36:17 +0000849 continue
Tim Peters2344fae2001-01-15 00:50:52 +0000850 err = self.clear_bpbynumber(i)
851 if err:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000852 print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000853 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000854 print('Deleted breakpoint', i, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000855 do_cl = do_clear # 'c' is already an abbreviation for 'continue'
856
857 def do_where(self, arg):
858 self.print_stack_trace()
859 do_w = do_where
Guido van Rossum6bd68352001-01-20 17:57:37 +0000860 do_bt = do_where
Tim Peters2344fae2001-01-15 00:50:52 +0000861
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000862 def _select_frame(self, number):
863 assert 0 <= number < len(self.stack)
864 self.curindex = number
865 self.curframe = self.stack[self.curindex][0]
866 self.curframe_locals = self.curframe.f_locals
867 self.print_stack_entry(self.stack[self.curindex])
868 self.lineno = None
869
Tim Peters2344fae2001-01-15 00:50:52 +0000870 def do_up(self, arg):
871 if self.curindex == 0:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000872 print('*** Oldest frame', file=self.stdout)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000873 return
874 try:
875 count = int(arg or 1)
876 except ValueError:
877 print('*** Invalid frame count (%s)' % arg, file=self.stdout)
878 return
879 if count < 0:
880 newframe = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000881 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000882 newframe = max(0, self.curindex - count)
883 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000884 do_u = do_up
885
886 def do_down(self, arg):
887 if self.curindex + 1 == len(self.stack):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000888 print('*** Newest frame', file=self.stdout)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000889 return
890 try:
891 count = int(arg or 1)
892 except ValueError:
893 print('*** Invalid frame count (%s)' % arg, file=self.stdout)
894 return
895 if count < 0:
896 newframe = len(self.stack) - 1
Tim Peters2344fae2001-01-15 00:50:52 +0000897 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000898 newframe = min(len(self.stack) - 1, self.curindex + count)
899 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000900 do_d = do_down
901
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000902 def do_until(self, arg):
Georg Brandl2dfec552010-07-30 08:43:32 +0000903 if arg:
904 try:
905 lineno = int(arg)
906 except ValueError:
907 print('*** Error in argument:', repr(arg), file=self.stdout)
908 return
909 if lineno <= self.curframe.f_lineno:
910 print('*** "until" line number is smaller than current '
911 'line number', file=self.stdout)
912 return
913 else:
914 lineno = None
915 self.set_until(self.curframe, lineno)
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000916 return 1
917 do_unt = do_until
918
Tim Peters2344fae2001-01-15 00:50:52 +0000919 def do_step(self, arg):
920 self.set_step()
921 return 1
922 do_s = do_step
923
924 def do_next(self, arg):
925 self.set_next(self.curframe)
926 return 1
927 do_n = do_next
928
Guido van Rossumd8faa362007-04-27 19:54:29 +0000929 def do_run(self, arg):
Georg Brandl3078df02009-05-05 09:11:31 +0000930 """Restart program by raising an exception to be caught in the main
931 debugger loop. If arguments were given, set them in sys.argv."""
Guido van Rossumd8faa362007-04-27 19:54:29 +0000932 if arg:
933 import shlex
934 argv0 = sys.argv[0:1]
935 sys.argv = shlex.split(arg)
936 sys.argv[:0] = argv0
937 raise Restart
938
939 do_restart = do_run
940
Tim Peters2344fae2001-01-15 00:50:52 +0000941 def do_return(self, arg):
942 self.set_return(self.curframe)
943 return 1
944 do_r = do_return
945
946 def do_continue(self, arg):
947 self.set_continue()
948 return 1
949 do_c = do_cont = do_continue
950
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000951 def do_jump(self, arg):
952 if self.curindex + 1 != len(self.stack):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000953 print("*** You can only jump within the bottom frame", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000954 return
955 try:
956 arg = int(arg)
957 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000958 print("*** The 'jump' command requires a line number.", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000959 else:
960 try:
961 # Do the jump, fix up our copy of the stack, and display the
962 # new position
963 self.curframe.f_lineno = arg
964 self.stack[self.curindex] = self.stack[self.curindex][0], arg
965 self.print_stack_entry(self.stack[self.curindex])
Guido van Rossumb940e112007-01-10 16:19:56 +0000966 except ValueError as e:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000967 print('*** Jump failed:', e, file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000968 do_j = do_jump
969
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000970 def do_debug(self, arg):
971 sys.settrace(None)
972 globals = self.curframe.f_globals
Benjamin Petersond23f8222009-04-05 19:13:16 +0000973 locals = self.curframe_locals
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000974 p = Pdb(self.completekey, self.stdin, self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000975 p.prompt = "(%s) " % self.prompt.strip()
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000976 print("ENTERING RECURSIVE DEBUGGER", file=self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000977 sys.call_tracing(p.run, (arg, globals, locals))
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000978 print("LEAVING RECURSIVE DEBUGGER", file=self.stdout)
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000979 sys.settrace(self.trace_dispatch)
980 self.lastcmd = p.lastcmd
981
Tim Peters2344fae2001-01-15 00:50:52 +0000982 def do_quit(self, arg):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000983 self._user_requested_quit = 1
Tim Peters2344fae2001-01-15 00:50:52 +0000984 self.set_quit()
985 return 1
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000986
Tim Peters2344fae2001-01-15 00:50:52 +0000987 do_q = do_quit
Guido van Rossumd1c08f32002-04-15 00:48:24 +0000988 do_exit = do_quit
Tim Peters2344fae2001-01-15 00:50:52 +0000989
Guido van Rossumeef26072003-01-13 21:13:55 +0000990 def do_EOF(self, arg):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000991 print(file=self.stdout)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000992 self._user_requested_quit = 1
Guido van Rossumeef26072003-01-13 21:13:55 +0000993 self.set_quit()
994 return 1
995
Tim Peters2344fae2001-01-15 00:50:52 +0000996 def do_args(self, arg):
Benjamin Petersond23f8222009-04-05 19:13:16 +0000997 co = self.curframe.f_code
998 dict = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000999 n = co.co_argcount
1000 if co.co_flags & 4: n = n+1
1001 if co.co_flags & 8: n = n+1
1002 for i in range(n):
1003 name = co.co_varnames[i]
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001004 print(name, '=', end=' ', file=self.stdout)
1005 if name in dict: print(dict[name], file=self.stdout)
1006 else: print("*** undefined ***", file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001007 do_a = do_args
Guido van Rossum2424f851998-09-11 22:50:09 +00001008
Tim Peters2344fae2001-01-15 00:50:52 +00001009 def do_retval(self, arg):
Benjamin Petersond23f8222009-04-05 19:13:16 +00001010 if '__return__' in self.curframe_locals:
1011 print(self.curframe_locals['__return__'], file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001012 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001013 print('*** Not yet returned!', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001014 do_rv = do_retval
Guido van Rossum2424f851998-09-11 22:50:09 +00001015
Barry Warsaw210bd202002-11-05 22:40:20 +00001016 def _getval(self, arg):
Tim Peters2344fae2001-01-15 00:50:52 +00001017 try:
Benjamin Petersond23f8222009-04-05 19:13:16 +00001018 return eval(arg, self.curframe.f_globals, self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +00001019 except:
1020 t, v = sys.exc_info()[:2]
Barry Warsaw210bd202002-11-05 22:40:20 +00001021 if isinstance(t, str):
Tim Peters2344fae2001-01-15 00:50:52 +00001022 exc_type_name = t
1023 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001024 print('***', exc_type_name + ':', repr(v), file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001025 raise
Guido van Rossum2424f851998-09-11 22:50:09 +00001026
Barry Warsaw210bd202002-11-05 22:40:20 +00001027 def do_p(self, arg):
1028 try:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001029 print(repr(self._getval(arg)), file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001030 except:
1031 pass
Georg Brandlc9879242007-09-04 07:07:56 +00001032 # make "print" an alias of "p" since print isn't a Python statement anymore
1033 do_print = do_p
Barry Warsaw210bd202002-11-05 22:40:20 +00001034
1035 def do_pp(self, arg):
1036 try:
Thomas Wouters477c8d52006-05-27 19:21:47 +00001037 pprint.pprint(self._getval(arg), self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001038 except:
1039 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001040
Tim Peters2344fae2001-01-15 00:50:52 +00001041 def do_list(self, arg):
1042 self.lastcmd = 'list'
1043 last = None
Georg Brandla91a94b2010-07-30 07:14:01 +00001044 if arg and arg != '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001045 try:
1046 x = eval(arg, {}, {})
1047 if type(x) == type(()):
1048 first, last = x
1049 first = int(first)
1050 last = int(last)
1051 if last < first:
1052 # Assume it's a count
1053 last = first + last
1054 else:
1055 first = max(1, int(x) - 5)
1056 except:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001057 print('*** Error in argument:', repr(arg), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001058 return
Georg Brandla91a94b2010-07-30 07:14:01 +00001059 elif self.lineno is None or arg == '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001060 first = max(1, self.curframe.f_lineno - 5)
1061 else:
1062 first = self.lineno + 1
1063 if last is None:
1064 last = first + 10
1065 filename = self.curframe.f_code.co_filename
1066 breaklist = self.get_file_breaks(filename)
1067 try:
1068 for lineno in range(first, last+1):
Georg Brandl3078df02009-05-05 09:11:31 +00001069 line = linecache.getline(filename, lineno,
1070 self.curframe.f_globals)
Tim Peters2344fae2001-01-15 00:50:52 +00001071 if not line:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001072 print('[EOF]', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001073 break
1074 else:
Walter Dörwald70a6b492004-02-12 17:35:32 +00001075 s = repr(lineno).rjust(3)
Tim Peters2344fae2001-01-15 00:50:52 +00001076 if len(s) < 4: s = s + ' '
1077 if lineno in breaklist: s = s + 'B'
1078 else: s = s + ' '
1079 if lineno == self.curframe.f_lineno:
1080 s = s + '->'
Guido van Rossumceae3752007-02-09 22:16:54 +00001081 print(s + '\t' + line, end='', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001082 self.lineno = lineno
1083 except KeyboardInterrupt:
1084 pass
1085 do_l = do_list
Guido van Rossum2424f851998-09-11 22:50:09 +00001086
Tim Peters2344fae2001-01-15 00:50:52 +00001087 def do_whatis(self, arg):
1088 try:
1089 value = eval(arg, self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +00001090 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +00001091 except:
1092 t, v = sys.exc_info()[:2]
1093 if type(t) == type(''):
1094 exc_type_name = t
1095 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001096 print('***', exc_type_name + ':', repr(v), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001097 return
1098 code = None
1099 # Is it a function?
Neal Norwitz221085d2007-02-25 20:55:47 +00001100 try: code = value.__code__
Tim Peters2344fae2001-01-15 00:50:52 +00001101 except: pass
1102 if code:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001103 print('Function', code.co_name, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001104 return
1105 # Is it an instance method?
Christian Heimesff737952007-11-27 10:40:20 +00001106 try: code = value.__func__.__code__
Tim Peters2344fae2001-01-15 00:50:52 +00001107 except: pass
1108 if code:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001109 print('Method', code.co_name, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001110 return
1111 # None of the above...
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001112 print(type(value), file=self.stdout)
Guido van Rossum8e2ec561993-07-29 09:37:38 +00001113
Tim Peters2344fae2001-01-15 00:50:52 +00001114 def do_alias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001115 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001116 if len(args) == 0:
Benjamin Petersonbe74a372009-09-11 21:17:13 +00001117 keys = sorted(self.aliases.keys())
Tim Peters2344fae2001-01-15 00:50:52 +00001118 for alias in keys:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001119 print("%s = %s" % (alias, self.aliases[alias]), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001120 return
Guido van Rossum08454592002-07-12 13:10:53 +00001121 if args[0] in self.aliases and len(args) == 1:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001122 print("%s = %s" % (args[0], self.aliases[args[0]]), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001123 else:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001124 self.aliases[args[0]] = ' '.join(args[1:])
Guido van Rossum23efba41992-01-27 16:58:47 +00001125
Tim Peters2344fae2001-01-15 00:50:52 +00001126 def do_unalias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001127 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001128 if len(args) == 0: return
Raymond Hettinger54f02222002-06-01 14:18:47 +00001129 if args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +00001130 del self.aliases[args[0]]
Guido van Rossum00230781993-03-29 11:39:45 +00001131
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001132 #list of all the commands making the program resume execution.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001133 commands_resuming = ['do_continue', 'do_step', 'do_next', 'do_return',
1134 'do_quit', 'do_jump']
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001135
Tim Peters2344fae2001-01-15 00:50:52 +00001136 # Print a traceback starting at the top stack frame.
1137 # The most recently entered frame is printed last;
1138 # this is different from dbx and gdb, but consistent with
1139 # the Python interpreter's stack trace.
1140 # It is also consistent with the up/down commands (which are
1141 # compatible with dbx and gdb: up moves towards 'main()'
1142 # and down moves towards the most recent stack frame).
Guido van Rossum2424f851998-09-11 22:50:09 +00001143
Tim Peters2344fae2001-01-15 00:50:52 +00001144 def print_stack_trace(self):
1145 try:
1146 for frame_lineno in self.stack:
1147 self.print_stack_entry(frame_lineno)
1148 except KeyboardInterrupt:
1149 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001150
Tim Peters2344fae2001-01-15 00:50:52 +00001151 def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix):
1152 frame, lineno = frame_lineno
1153 if frame is self.curframe:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001154 print('>', end=' ', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001155 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001156 print(' ', end=' ', file=self.stdout)
1157 print(self.format_stack_entry(frame_lineno,
1158 prompt_prefix), file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001159
Guido van Rossum921c8241992-01-10 14:54:42 +00001160
Georg Brandl02053ee2010-07-18 10:11:03 +00001161 # Help methods (derived from docstring)
Guido van Rossum921c8241992-01-10 14:54:42 +00001162
Tim Peters2344fae2001-01-15 00:50:52 +00001163 def help_help(self):
1164 self.help_h()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001165
Tim Peters2344fae2001-01-15 00:50:52 +00001166 def help_h(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001167 print("""h(elp)
Tim Peters2344fae2001-01-15 00:50:52 +00001168Without argument, print the list of available commands.
1169With a command name as argument, print help about that command
Georg Brandl55353ca2010-07-19 08:02:46 +00001170"help pdb" shows the full pdb documentation
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001171"help exec" gives help on the ! command""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001172
Tim Peters2344fae2001-01-15 00:50:52 +00001173 def help_where(self):
1174 self.help_w()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001175
Tim Peters2344fae2001-01-15 00:50:52 +00001176 def help_w(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001177 print("""w(here)
Tim Peters2344fae2001-01-15 00:50:52 +00001178Print a stack trace, with the most recent frame at the bottom.
1179An arrow indicates the "current frame", which determines the
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001180context of most commands. 'bt' is an alias for this command.""", file=self.stdout)
Guido van Rossum6bd68352001-01-20 17:57:37 +00001181
1182 help_bt = help_w
Guido van Rossumb6775db1994-08-01 11:34:53 +00001183
Tim Peters2344fae2001-01-15 00:50:52 +00001184 def help_down(self):
1185 self.help_d()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001186
Tim Peters2344fae2001-01-15 00:50:52 +00001187 def help_d(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001188 print("""d(own)
Tim Peters2344fae2001-01-15 00:50:52 +00001189Move the current frame one level down in the stack trace
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001190(to a newer frame).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001191
Tim Peters2344fae2001-01-15 00:50:52 +00001192 def help_up(self):
1193 self.help_u()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001194
Tim Peters2344fae2001-01-15 00:50:52 +00001195 def help_u(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001196 print("""u(p)
Tim Peters2344fae2001-01-15 00:50:52 +00001197Move the current frame one level up in the stack trace
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001198(to an older frame).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001199
Tim Peters2344fae2001-01-15 00:50:52 +00001200 def help_break(self):
1201 self.help_b()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001202
Tim Peters2344fae2001-01-15 00:50:52 +00001203 def help_b(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001204 print("""b(reak) ([file:]lineno | function) [, condition]
Tim Peters2344fae2001-01-15 00:50:52 +00001205With a line number argument, set a break there in the current
1206file. With a function name, set a break at first executable line
1207of that function. Without argument, list all breaks. If a second
1208argument is present, it is a string specifying an expression
1209which must evaluate to true before the breakpoint is honored.
Guido van Rossumb6775db1994-08-01 11:34:53 +00001210
Tim Peters2344fae2001-01-15 00:50:52 +00001211The line number may be prefixed with a filename and a colon,
1212to specify a breakpoint in another file (probably one that
1213hasn't been loaded yet). The file is searched for on sys.path;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001214the .py suffix may be omitted.""", file=self.stdout)
Guido van Rossumb5699c71998-07-20 23:13:54 +00001215
Tim Peters2344fae2001-01-15 00:50:52 +00001216 def help_clear(self):
1217 self.help_cl()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001218
Tim Peters2344fae2001-01-15 00:50:52 +00001219 def help_cl(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001220 print("cl(ear) filename:lineno", file=self.stdout)
1221 print("""cl(ear) [bpnumber [bpnumber...]]
Tim Peters2344fae2001-01-15 00:50:52 +00001222With a space separated list of breakpoint numbers, clear
1223those breakpoints. Without argument, clear all breaks (but
1224first ask confirmation). With a filename:lineno argument,
Georg Brandld348b252008-01-05 20:00:55 +00001225clear all breaks at that line in that file.""", file=self.stdout)
Guido van Rossumb5699c71998-07-20 23:13:54 +00001226
Tim Peters2344fae2001-01-15 00:50:52 +00001227 def help_tbreak(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001228 print("""tbreak same arguments as break, but breakpoint is
1229removed when first hit.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001230
Tim Peters2344fae2001-01-15 00:50:52 +00001231 def help_enable(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001232 print("""enable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +00001233Enables the breakpoints given as a space separated list of
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001234bp numbers.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001235
Tim Peters2344fae2001-01-15 00:50:52 +00001236 def help_disable(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001237 print("""disable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +00001238Disables the breakpoints given as a space separated list of
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001239bp numbers.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001240
Tim Peters2344fae2001-01-15 00:50:52 +00001241 def help_ignore(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001242 print("""ignore bpnumber count
Tim Peters2344fae2001-01-15 00:50:52 +00001243Sets the ignore count for the given breakpoint number. A breakpoint
1244becomes active when the ignore count is zero. When non-zero, the
1245count is decremented each time the breakpoint is reached and the
1246breakpoint is not disabled and any associated condition evaluates
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001247to true.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001248
Tim Peters2344fae2001-01-15 00:50:52 +00001249 def help_condition(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001250 print("""condition bpnumber str_condition
Tim Peters2344fae2001-01-15 00:50:52 +00001251str_condition is a string specifying an expression which
1252must evaluate to true before the breakpoint is honored.
1253If str_condition is absent, any existing condition is removed;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001254i.e., the breakpoint is made unconditional.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001255
Tim Peters2344fae2001-01-15 00:50:52 +00001256 def help_step(self):
1257 self.help_s()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001258
Tim Peters2344fae2001-01-15 00:50:52 +00001259 def help_s(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001260 print("""s(tep)
Tim Peters2344fae2001-01-15 00:50:52 +00001261Execute the current line, stop at the first possible occasion
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001262(either in a function that is called or in the current function).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001263
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +00001264 def help_until(self):
1265 self.help_unt()
1266
1267 def help_unt(self):
1268 print("""unt(il)
1269Continue execution until the line with a number greater than the current
1270one is reached or until the current frame returns""")
1271
Tim Peters2344fae2001-01-15 00:50:52 +00001272 def help_next(self):
1273 self.help_n()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001274
Tim Peters2344fae2001-01-15 00:50:52 +00001275 def help_n(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001276 print("""n(ext)
Tim Peters2344fae2001-01-15 00:50:52 +00001277Continue execution until the next line in the current function
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001278is reached or it returns.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001279
Tim Peters2344fae2001-01-15 00:50:52 +00001280 def help_return(self):
1281 self.help_r()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001282
Tim Peters2344fae2001-01-15 00:50:52 +00001283 def help_r(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001284 print("""r(eturn)
1285Continue execution until the current function returns.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001286
Tim Peters2344fae2001-01-15 00:50:52 +00001287 def help_continue(self):
1288 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001289
Tim Peters2344fae2001-01-15 00:50:52 +00001290 def help_cont(self):
1291 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001292
Tim Peters2344fae2001-01-15 00:50:52 +00001293 def help_c(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001294 print("""c(ont(inue))
1295Continue execution, only stop when a breakpoint is encountered.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001296
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001297 def help_jump(self):
1298 self.help_j()
1299
1300 def help_j(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001301 print("""j(ump) lineno
1302Set the next line that will be executed.""", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001303
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001304 def help_debug(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001305 print("""debug code
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001306Enter a recursive debugger that steps through the code argument
1307(which is an arbitrary expression or statement to be executed
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001308in the current environment).""", file=self.stdout)
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001309
Tim Peters2344fae2001-01-15 00:50:52 +00001310 def help_list(self):
1311 self.help_l()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001312
Tim Peters2344fae2001-01-15 00:50:52 +00001313 def help_l(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001314 print("""l(ist) [first [,last]]
Tim Peters2344fae2001-01-15 00:50:52 +00001315List source code for the current file.
1316Without arguments, list 11 lines around the current line
1317or continue the previous listing.
1318With one argument, list 11 lines starting at that line.
1319With two arguments, list the given range;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001320if the second argument is less than the first, it is a count.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001321
Tim Peters2344fae2001-01-15 00:50:52 +00001322 def help_args(self):
1323 self.help_a()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001324
Tim Peters2344fae2001-01-15 00:50:52 +00001325 def help_a(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001326 print("""a(rgs)
1327Print the arguments of the current function.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001328
Tim Peters2344fae2001-01-15 00:50:52 +00001329 def help_p(self):
Georg Brandlc9879242007-09-04 07:07:56 +00001330 print("""p(rint) expression
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001331Print the value of the expression.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001332
Barry Warsaw210bd202002-11-05 22:40:20 +00001333 def help_pp(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001334 print("""pp expression
1335Pretty-print the value of the expression.""", file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001336
Tim Peters2344fae2001-01-15 00:50:52 +00001337 def help_exec(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001338 print("""(!) statement
Tim Peters2344fae2001-01-15 00:50:52 +00001339Execute the (one-line) statement in the context of
1340the current stack frame.
1341The exclamation point can be omitted unless the first word
1342of the statement resembles a debugger command.
1343To assign to a global variable you must always prefix the
1344command with a 'global' command, e.g.:
1345(Pdb) global list_options; list_options = ['-l']
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001346(Pdb)""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001347
Guido van Rossumd8faa362007-04-27 19:54:29 +00001348 def help_run(self):
1349 print("""run [args...]
1350Restart the debugged python program. If a string is supplied, it is
1351splitted with "shlex" and the result is used as the new sys.argv.
1352History, breakpoints, actions and debugger options are preserved.
1353"restart" is an alias for "run".""")
1354
1355 help_restart = help_run
1356
Tim Peters2344fae2001-01-15 00:50:52 +00001357 def help_quit(self):
1358 self.help_q()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001359
Tim Peters2344fae2001-01-15 00:50:52 +00001360 def help_q(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001361 print("""q(uit) or exit - Quit from the debugger.
1362The program being executed is aborted.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001363
Guido van Rossumd1c08f32002-04-15 00:48:24 +00001364 help_exit = help_q
1365
Tim Peters2344fae2001-01-15 00:50:52 +00001366 def help_whatis(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001367 print("""whatis arg
1368Prints the type of the argument.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001369
Tim Peters2344fae2001-01-15 00:50:52 +00001370 def help_EOF(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001371 print("""EOF
1372Handles the receipt of EOF as a command.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001373
Tim Peters2344fae2001-01-15 00:50:52 +00001374 def help_alias(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001375 print("""alias [name [command [parameter parameter ...] ]]
Tim Peters2344fae2001-01-15 00:50:52 +00001376Creates an alias called 'name' the executes 'command'. The command
1377must *not* be enclosed in quotes. Replaceable parameters are
1378indicated by %1, %2, and so on, while %* is replaced by all the
1379parameters. If no command is given, the current alias for name
1380is shown. If no name is given, all aliases are listed.
Guido van Rossum2424f851998-09-11 22:50:09 +00001381
Tim Peters2344fae2001-01-15 00:50:52 +00001382Aliases may be nested and can contain anything that can be
1383legally typed at the pdb prompt. Note! You *can* override
1384internal pdb commands with aliases! Those internal commands
1385are then hidden until the alias is removed. Aliasing is recursively
1386applied to the first word of the command line; all other words
1387in the line are left alone.
Guido van Rossum2424f851998-09-11 22:50:09 +00001388
Tim Peters2344fae2001-01-15 00:50:52 +00001389Some useful aliases (especially when placed in the .pdbrc file) are:
Guido van Rossum2424f851998-09-11 22:50:09 +00001390
Tim Peters2344fae2001-01-15 00:50:52 +00001391#Print instance variables (usage "pi classInst")
1392alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
Guido van Rossum2424f851998-09-11 22:50:09 +00001393
Tim Peters2344fae2001-01-15 00:50:52 +00001394#Print instance variables in self
1395alias ps pi self
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001396""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001397
Tim Peters2344fae2001-01-15 00:50:52 +00001398 def help_unalias(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001399 print("""unalias name
1400Deletes the specified alias.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001401
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001402 def help_commands(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001403 print("""commands [bpnumber]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001404(com) ...
1405(com) end
1406(Pdb)
1407
1408Specify a list of commands for breakpoint number bpnumber. The
1409commands themselves appear on the following lines. Type a line
1410containing just 'end' to terminate the commands.
1411
1412To remove all commands from a breakpoint, type commands and
1413follow it immediately with end; that is, give no commands.
1414
1415With no bpnumber argument, commands refers to the last
1416breakpoint set.
1417
1418You can use breakpoint commands to start your program up again.
1419Simply use the continue command, or step, or any other
1420command that resumes execution.
1421
1422Specifying any command resuming execution (currently continue,
1423step, next, return, jump, quit and their abbreviations) terminates
1424the command list (as if that command was immediately followed by end).
1425This is because any time you resume execution
1426(even with a simple next or step), you may encounter
1427another breakpoint--which could have its own command list, leading to
1428ambiguities about which list to execute.
1429
1430 If you use the 'silent' command in the command list, the
1431usual message about stopping at a breakpoint is not printed. This may
1432be desirable for breakpoints that are to print a specific message and
1433then continue. If none of the other commands print anything, you
1434see no sign that the breakpoint was reached.
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001435""", file=self.stdout)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001436
Tim Peters2344fae2001-01-15 00:50:52 +00001437 def help_pdb(self):
1438 help()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001439
Tim Peters2344fae2001-01-15 00:50:52 +00001440 def lookupmodule(self, filename):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001441 """Helper function for break/clear parsing -- may be overridden.
1442
1443 lookupmodule() translates (possibly incomplete) file or module name
1444 into an absolute file name.
1445 """
1446 if os.path.isabs(filename) and os.path.exists(filename):
Tim Peterse718f612004-10-12 21:51:32 +00001447 return filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001448 f = os.path.join(sys.path[0], filename)
1449 if os.path.exists(f) and self.canonic(f) == self.mainpyfile:
1450 return f
Tim Peters2344fae2001-01-15 00:50:52 +00001451 root, ext = os.path.splitext(filename)
1452 if ext == '':
1453 filename = filename + '.py'
1454 if os.path.isabs(filename):
1455 return filename
1456 for dirname in sys.path:
1457 while os.path.islink(dirname):
1458 dirname = os.readlink(dirname)
1459 fullname = os.path.join(dirname, filename)
1460 if os.path.exists(fullname):
1461 return fullname
1462 return None
Guido van Rossumb5699c71998-07-20 23:13:54 +00001463
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001464 def _runscript(self, filename):
Guido van Rossumd8faa362007-04-27 19:54:29 +00001465 # The script has to run in __main__ namespace (or imports from
1466 # __main__ will break).
1467 #
1468 # So we clear up the __main__ and set several special variables
1469 # (this gets rid of pdb's globals and cleans old variables on restarts).
1470 import __main__
1471 __main__.__dict__.clear()
1472 __main__.__dict__.update({"__name__" : "__main__",
1473 "__file__" : filename,
1474 "__builtins__": __builtins__,
1475 })
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001476
1477 # When bdb sets tracing, a number of call and line events happens
1478 # BEFORE debugger even reaches user's code (and the exact sequence of
1479 # events depends on python version). So we take special measures to
1480 # avoid stopping before we reach the main script (see user_line and
1481 # user_call for details).
1482 self._wait_for_mainpyfile = 1
1483 self.mainpyfile = self.canonic(filename)
1484 self._user_requested_quit = 0
Georg Brandld07ac642009-08-13 07:50:57 +00001485 with open(filename, "rb") as fp:
1486 statement = "exec(compile(%r, %r, 'exec'))" % \
1487 (fp.read(), self.mainpyfile)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001488 self.run(statement)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001489
Guido van Rossum35771131992-09-08 11:59:04 +00001490# Simplified interface
1491
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001492def run(statement, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001493 Pdb().run(statement, globals, locals)
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001494
1495def runeval(expression, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001496 return Pdb().runeval(expression, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001497
1498def runctx(statement, globals, locals):
Tim Peters2344fae2001-01-15 00:50:52 +00001499 # B/W compatibility
1500 run(statement, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001501
Raymond Hettinger2ef7e6c2004-10-24 00:32:24 +00001502def runcall(*args, **kwds):
1503 return Pdb().runcall(*args, **kwds)
Guido van Rossum4e160981992-09-02 20:43:20 +00001504
Guido van Rossumb6775db1994-08-01 11:34:53 +00001505def set_trace():
Johannes Gijsbers84a6c202004-11-07 11:35:30 +00001506 Pdb().set_trace(sys._getframe().f_back)
Guido van Rossum35771131992-09-08 11:59:04 +00001507
1508# Post-Mortem interface
1509
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001510def post_mortem(t=None):
1511 # handling the default
1512 if t is None:
1513 # sys.exc_info() returns (type, value, traceback) if an exception is
1514 # being handled, otherwise it returns None
1515 t = sys.exc_info()[2]
1516 if t is None:
1517 raise ValueError("A valid traceback must be passed if no "
1518 "exception is being handled")
1519
Tim Peters2344fae2001-01-15 00:50:52 +00001520 p = Pdb()
1521 p.reset()
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001522 p.interaction(None, t)
Guido van Rossum35771131992-09-08 11:59:04 +00001523
1524def pm():
Tim Peters2344fae2001-01-15 00:50:52 +00001525 post_mortem(sys.last_traceback)
Guido van Rossum35771131992-09-08 11:59:04 +00001526
1527
1528# Main program for testing
1529
Guido van Rossum23efba41992-01-27 16:58:47 +00001530TESTCMD = 'import x; x.main()'
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001531
Guido van Rossum921c8241992-01-10 14:54:42 +00001532def test():
Tim Peters2344fae2001-01-15 00:50:52 +00001533 run(TESTCMD)
Guido van Rossume61fa0a1993-10-22 13:56:35 +00001534
1535# print help
1536def help():
Georg Brandl02053ee2010-07-18 10:11:03 +00001537 import pydoc
1538 pydoc.pager(__doc__)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001539
Georg Brandle0230912010-07-30 08:29:39 +00001540_usage = """\
1541usage: pdb.py [-c command] ... pyfile [arg] ...
1542
1543Debug the Python program given by pyfile.
1544
1545Initial commands are read from .pdbrc files in your home directory
1546and in the current directory, if they exist. Commands supplied with
1547-c are executed after commands from .pdbrc files.
1548
1549To let the script run until an exception occurs, use "-c continue".
Georg Brandl2dfec552010-07-30 08:43:32 +00001550To let the script run up to a given line X in the debugged file, use
1551"-c 'until X'"."""
Georg Brandle0230912010-07-30 08:29:39 +00001552
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001553def main():
Georg Brandle0230912010-07-30 08:29:39 +00001554 import getopt
1555
1556 opts, args = getopt.getopt(sys.argv[1:], 'hc:', ['--help', '--command='])
1557
1558 if not args:
1559 print(_usage)
Tim Peters2344fae2001-01-15 00:50:52 +00001560 sys.exit(2)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001561
Georg Brandle0230912010-07-30 08:29:39 +00001562 commands = []
1563 for opt, optarg in opts:
1564 if opt in ['-h', '--help']:
1565 print(_usage)
1566 sys.exit()
1567 elif opt in ['-c', '--command']:
1568 commands.append(optarg)
1569
1570 mainpyfile = args[0] # Get script filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001571 if not os.path.exists(mainpyfile):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001572 print('Error:', mainpyfile, 'does not exist')
Tim Peters2344fae2001-01-15 00:50:52 +00001573 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001574
Georg Brandle0230912010-07-30 08:29:39 +00001575 sys.argv[:] = args # Hide "pdb.py" and pdb options from argument list
Guido van Rossumec577d51996-09-10 17:39:34 +00001576
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001577 # Replace pdb's dir with script's dir in front of module search path.
1578 sys.path[0] = os.path.dirname(mainpyfile)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001579
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001580 # Note on saving/restoring sys.argv: it's a good idea when sys.argv was
1581 # modified by the script being debugged. It's a bad idea when it was
Georg Brandl3078df02009-05-05 09:11:31 +00001582 # changed by the user from the command line. There is a "restart" command
1583 # which allows explicit specification of command line arguments.
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001584 pdb = Pdb()
Georg Brandle0230912010-07-30 08:29:39 +00001585 pdb.rcLines.extend(commands)
Georg Brandl1e30bd32010-07-30 07:21:26 +00001586 while True:
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001587 try:
1588 pdb._runscript(mainpyfile)
1589 if pdb._user_requested_quit:
1590 break
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001591 print("The program finished and will be restarted")
Guido van Rossumd8faa362007-04-27 19:54:29 +00001592 except Restart:
1593 print("Restarting", mainpyfile, "with arguments:")
Georg Brandle0230912010-07-30 08:29:39 +00001594 print("\t" + " ".join(args))
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001595 except SystemExit:
1596 # In most cases SystemExit does not warrant a post-mortem session.
Georg Brandle0230912010-07-30 08:29:39 +00001597 print("The program exited via sys.exit(). Exit status:", end=' ')
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001598 print(sys.exc_info()[1])
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001599 except:
1600 traceback.print_exc()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001601 print("Uncaught exception. Entering post mortem debugging")
1602 print("Running 'cont' or 'step' will restart the program")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001603 t = sys.exc_info()[2]
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001604 pdb.interaction(None, t)
Georg Brandl3078df02009-05-05 09:11:31 +00001605 print("Post mortem debugger finished. The " + mainpyfile +
1606 " will be restarted")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001607
1608
1609# When invoked as main program, invoke the debugger on a script
Guido van Rossumd8faa362007-04-27 19:54:29 +00001610if __name__ == '__main__':
1611 import pdb
1612 pdb.main()