blob: 1e8821aa8cd43fcb8bc0c22f1eaea893653e3ebc [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."""
Georg Brandl34cc0f52010-07-30 09:43:00 +0000416 if self._wait_for_mainpyfile:
417 return
Tim Peters2344fae2001-01-15 00:50:52 +0000418 frame.f_locals['__return__'] = return_value
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000419 print('--Return--', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000420 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000421
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000422 def user_exception(self, frame, exc_info):
Tim Peters2344fae2001-01-15 00:50:52 +0000423 """This function is called if an exception occurs,
424 but only if we are to stop at or just below this level."""
Georg Brandl34cc0f52010-07-30 09:43:00 +0000425 if self._wait_for_mainpyfile:
426 return
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000427 exc_type, exc_value, exc_traceback = exc_info
Tim Peters2344fae2001-01-15 00:50:52 +0000428 frame.f_locals['__exception__'] = exc_type, exc_value
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000429 exc_type_name = exc_type.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000430 print(exc_type_name + ':', _saferepr(exc_value), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000431 self.interaction(frame, exc_traceback)
Guido van Rossum2424f851998-09-11 22:50:09 +0000432
Tim Peters2344fae2001-01-15 00:50:52 +0000433 # General interaction function
434
435 def interaction(self, frame, traceback):
Georg Brandle0230912010-07-30 08:29:39 +0000436 if self.setup(frame, traceback):
437 # no interaction desired at this time (happens if .pdbrc contains
438 # a command like "continue")
439 self.forget()
440 return
Tim Peters2344fae2001-01-15 00:50:52 +0000441 self.print_stack_entry(self.stack[self.curindex])
442 self.cmdloop()
443 self.forget()
444
Benjamin Petersond23f8222009-04-05 19:13:16 +0000445 def displayhook(self, obj):
446 """Custom displayhook for the exec in default(), which prevents
447 assignment of the _ variable in the builtins.
448 """
Georg Brandl9fa2e022009-09-16 16:40:45 +0000449 # reproduce the behavior of the standard displayhook, not printing None
450 if obj is not None:
451 print(repr(obj))
Benjamin Petersond23f8222009-04-05 19:13:16 +0000452
Tim Peters2344fae2001-01-15 00:50:52 +0000453 def default(self, line):
454 if line[:1] == '!': line = line[1:]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000455 locals = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000456 globals = self.curframe.f_globals
457 try:
458 code = compile(line + '\n', '<stdin>', 'single')
Christian Heimes679db4a2008-01-18 09:56:22 +0000459 save_stdout = sys.stdout
460 save_stdin = sys.stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000461 save_displayhook = sys.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000462 try:
463 sys.stdin = self.stdin
464 sys.stdout = self.stdout
Benjamin Petersond23f8222009-04-05 19:13:16 +0000465 sys.displayhook = self.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000466 exec(code, globals, locals)
467 finally:
468 sys.stdout = save_stdout
469 sys.stdin = save_stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000470 sys.displayhook = save_displayhook
Tim Peters2344fae2001-01-15 00:50:52 +0000471 except:
472 t, v = sys.exc_info()[:2]
473 if type(t) == type(''):
474 exc_type_name = t
475 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000476 print('***', exc_type_name + ':', v, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000477
478 def precmd(self, line):
479 """Handle alias expansion and ';;' separator."""
Guido van Rossum08454592002-07-12 13:10:53 +0000480 if not line.strip():
Tim Peters2344fae2001-01-15 00:50:52 +0000481 return line
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000482 args = line.split()
Raymond Hettinger54f02222002-06-01 14:18:47 +0000483 while args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000484 line = self.aliases[args[0]]
485 ii = 1
486 for tmpArg in args[1:]:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000487 line = line.replace("%" + str(ii),
Tim Peters2344fae2001-01-15 00:50:52 +0000488 tmpArg)
489 ii = ii + 1
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000490 line = line.replace("%*", ' '.join(args[1:]))
491 args = line.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000492 # split into ';;' separated commands
493 # unless it's an alias command
494 if args[0] != 'alias':
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000495 marker = line.find(';;')
Tim Peters2344fae2001-01-15 00:50:52 +0000496 if marker >= 0:
497 # queue up everything after marker
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000498 next = line[marker+2:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000499 self.cmdqueue.append(next)
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000500 line = line[:marker].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000501 return line
502
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000503 def onecmd(self, line):
504 """Interpret the argument as though it had been typed in response
505 to the prompt.
506
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000507 Checks whether this line is typed at the normal prompt or in
508 a breakpoint command list definition.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000509 """
510 if not self.commands_defining:
511 return cmd.Cmd.onecmd(self, line)
512 else:
513 return self.handle_command_def(line)
514
515 def handle_command_def(self,line):
Georg Brandl44f8bf92010-07-30 08:54:49 +0000516 """Handles one command line during command list definition."""
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000517 cmd, arg, line = self.parseline(line)
Georg Brandl44f8bf92010-07-30 08:54:49 +0000518 if not cmd:
519 return
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000520 if cmd == 'silent':
521 self.commands_silent[self.commands_bnum] = True
522 return # continue to handle other cmd def in the cmd list
523 elif cmd == 'end':
524 self.cmdqueue = []
525 return 1 # end of cmd list
526 cmdlist = self.commands[self.commands_bnum]
Georg Brandl44f8bf92010-07-30 08:54:49 +0000527 if arg:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000528 cmdlist.append(cmd+' '+arg)
529 else:
530 cmdlist.append(cmd)
531 # Determine if we must stop
532 try:
533 func = getattr(self, 'do_' + cmd)
534 except AttributeError:
535 func = self.default
Georg Brandl3078df02009-05-05 09:11:31 +0000536 # one of the resuming commands
537 if func.__name__ in self.commands_resuming:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000538 self.commands_doprompt[self.commands_bnum] = False
539 self.cmdqueue = []
540 return 1
541 return
542
Tim Peters2344fae2001-01-15 00:50:52 +0000543 # Command definitions, called by cmdloop()
544 # The argument is the remaining string on the command line
545 # Return true to exit from the command loop
546
547 do_h = cmd.Cmd.do_help
548
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000549 def do_commands(self, arg):
Georg Brandl3078df02009-05-05 09:11:31 +0000550 """Defines a list of commands associated to a breakpoint.
551
552 Those commands will be executed whenever the breakpoint causes
553 the program to stop execution."""
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000554 if not arg:
Georg Brandl7410dd12010-07-30 12:01:20 +0000555 bnum = len(bdb.Breakpoint.bpbynumber) - 1
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000556 else:
557 try:
558 bnum = int(arg)
559 except:
Georg Brandl7410dd12010-07-30 12:01:20 +0000560 print("Usage: commands [bnum]\n ...\n end",
Georg Brandl3078df02009-05-05 09:11:31 +0000561 file=self.stdout)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000562 return
563 self.commands_bnum = bnum
564 self.commands[bnum] = []
565 self.commands_doprompt[bnum] = True
566 self.commands_silent[bnum] = False
567 prompt_back = self.prompt
568 self.prompt = '(com) '
569 self.commands_defining = True
Georg Brandl44f8bf92010-07-30 08:54:49 +0000570 try:
571 self.cmdloop()
572 finally:
573 self.commands_defining = False
574 self.prompt = prompt_back
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000575
Tim Peters2344fae2001-01-15 00:50:52 +0000576 def do_break(self, arg, temporary = 0):
577 # break [ ([filename:]lineno | function) [, "condition"] ]
578 if not arg:
579 if self.breaks: # There's at least one
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000580 print("Num Type Disp Enb Where", file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000581 for bp in bdb.Breakpoint.bpbynumber:
582 if bp:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000583 bp.bpprint(self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000584 return
585 # parse arguments; comma has lowest precedence
586 # and cannot occur in filename
587 filename = None
588 lineno = None
589 cond = None
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000590 comma = arg.find(',')
Tim Peters2344fae2001-01-15 00:50:52 +0000591 if comma > 0:
592 # parse stuff after comma: "condition"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000593 cond = arg[comma+1:].lstrip()
594 arg = arg[:comma].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000595 # parse stuff before comma: [filename:]lineno | function
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000596 colon = arg.rfind(':')
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000597 funcname = None
Tim Peters2344fae2001-01-15 00:50:52 +0000598 if colon >= 0:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000599 filename = arg[:colon].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000600 f = self.lookupmodule(filename)
601 if not f:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000602 print('*** ', repr(filename), end=' ', file=self.stdout)
603 print('not found from sys.path', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000604 return
605 else:
606 filename = f
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000607 arg = arg[colon+1:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000608 try:
609 lineno = int(arg)
Guido van Rossumb940e112007-01-10 16:19:56 +0000610 except ValueError as msg:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000611 print('*** Bad lineno:', arg, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000612 return
613 else:
614 # no colon; can be lineno or function
615 try:
616 lineno = int(arg)
617 except ValueError:
618 try:
619 func = eval(arg,
620 self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +0000621 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000622 except:
623 func = arg
624 try:
Christian Heimesff737952007-11-27 10:40:20 +0000625 if hasattr(func, '__func__'):
626 func = func.__func__
Neal Norwitz221085d2007-02-25 20:55:47 +0000627 code = func.__code__
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000628 #use co_name to identify the bkpt (function names
629 #could be aliased, but co_name is invariant)
630 funcname = code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000631 lineno = code.co_firstlineno
632 filename = code.co_filename
633 except:
634 # last thing to try
635 (ok, filename, ln) = self.lineinfo(arg)
636 if not ok:
Georg Brandl7410dd12010-07-30 12:01:20 +0000637 print('*** The specified object %r is not a function '
638 'or was not found along sys.path.' % arg,
639 file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000640 return
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000641 funcname = ok # ok contains a function name
Tim Peters2344fae2001-01-15 00:50:52 +0000642 lineno = int(ln)
643 if not filename:
644 filename = self.defaultFile()
645 # Check for reasonable breakpoint
646 line = self.checkline(filename, lineno)
647 if line:
648 # now set the break point
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000649 err = self.set_break(filename, line, temporary, cond, funcname)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000650 if err: print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000651 else:
652 bp = self.get_breaks(filename, line)[-1]
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000653 print("Breakpoint %d at %s:%d" % (bp.number,
Thomas Wouters477c8d52006-05-27 19:21:47 +0000654 bp.file,
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000655 bp.line), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000656
657 # To be overridden in derived debuggers
658 def defaultFile(self):
659 """Produce a reasonable default."""
660 filename = self.curframe.f_code.co_filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000661 if filename == '<string>' and self.mainpyfile:
662 filename = self.mainpyfile
Tim Peters2344fae2001-01-15 00:50:52 +0000663 return filename
664
665 do_b = do_break
666
667 def do_tbreak(self, arg):
668 self.do_break(arg, 1)
669
670 def lineinfo(self, identifier):
671 failed = (None, None, None)
672 # Input is identifier, may be in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000673 idstring = identifier.split("'")
Tim Peters2344fae2001-01-15 00:50:52 +0000674 if len(idstring) == 1:
675 # not in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000676 id = idstring[0].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000677 elif len(idstring) == 3:
678 # quoted
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000679 id = idstring[1].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000680 else:
681 return failed
682 if id == '': return failed
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000683 parts = id.split('.')
Tim Peters2344fae2001-01-15 00:50:52 +0000684 # Protection for derived debuggers
685 if parts[0] == 'self':
686 del parts[0]
687 if len(parts) == 0:
688 return failed
689 # Best first guess at file to look at
690 fname = self.defaultFile()
691 if len(parts) == 1:
692 item = parts[0]
693 else:
694 # More than one part.
695 # First is module, second is method/class
696 f = self.lookupmodule(parts[0])
697 if f:
698 fname = f
699 item = parts[1]
700 answer = find_function(item, fname)
701 return answer or failed
702
703 def checkline(self, filename, lineno):
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000704 """Check whether specified line seems to be executable.
Tim Peters2344fae2001-01-15 00:50:52 +0000705
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000706 Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank
707 line or EOF). Warning: testing is not comprehensive.
708 """
Georg Brandl1e30bd32010-07-30 07:21:26 +0000709 # this method should be callable before starting debugging, so default
710 # to "no globals" if there is no current frame
711 globs = self.curframe.f_globals if hasattr(self, 'curframe') else None
712 line = linecache.getline(filename, lineno, globs)
Tim Peters2344fae2001-01-15 00:50:52 +0000713 if not line:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000714 print('End of file', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000715 return 0
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000716 line = line.strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000717 # Don't allow setting breakpoint at a blank line
Guido van Rossum08454592002-07-12 13:10:53 +0000718 if (not line or (line[0] == '#') or
719 (line[:3] == '"""') or line[:3] == "'''"):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000720 print('*** Blank or comment', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000721 return 0
Tim Peters2344fae2001-01-15 00:50:52 +0000722 return lineno
723
724 def do_enable(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:
Georg Brandl7410dd12010-07-30 12:01:20 +0000728 bp = self.get_bpbynumber(i)
729 except ValueError as err:
730 print('***', err, file=self.stdout)
731 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000732 bp.enable()
Georg Brandl7410dd12010-07-30 12:01:20 +0000733 print('Enabled %s' % bp, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000734
735 def do_disable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000736 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000737 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000738 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000739 bp = self.get_bpbynumber(i)
740 except ValueError as err:
741 print('***', err, file=self.stdout)
742 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000743 bp.disable()
Georg Brandl7410dd12010-07-30 12:01:20 +0000744 print('Disabled %s' % bp, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000745
746 def do_condition(self, arg):
747 # arg is breakpoint number and condition
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000748 args = arg.split(' ', 1)
Thomas Woutersb2137042007-02-01 18:02:27 +0000749 try:
Tim Peters2344fae2001-01-15 00:50:52 +0000750 cond = args[1]
Georg Brandl7410dd12010-07-30 12:01:20 +0000751 except IndexError:
Tim Peters2344fae2001-01-15 00:50:52 +0000752 cond = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000753 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000754 bp = self.get_bpbynumber(args[0].strip())
755 except ValueError as err:
756 print('***', err, file=self.stdout)
757 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000758 bp.cond = cond
759 if not cond:
Georg Brandl7410dd12010-07-30 12:01:20 +0000760 print('Breakpoint %d is now unconditional.' % bp.number,
761 file=self.stdout)
762 else:
763 print('New condition set for breakpoint %d.' % bp.number,
764 file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000765
Georg Brandl7410dd12010-07-30 12:01:20 +0000766 def do_ignore(self, arg):
Tim Peters2344fae2001-01-15 00:50:52 +0000767 """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:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000770 count = int(args[1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000771 except:
772 count = 0
Guido van Rossumd8faa362007-04-27 19:54:29 +0000773 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000774 bp = self.get_bpbynumber(args[0].strip())
775 except ValueError as err:
776 print('***', err, file=self.stdout)
777 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000778 bp.ignore = count
Guido van Rossum08454592002-07-12 13:10:53 +0000779 if count > 0:
Tim Peters2344fae2001-01-15 00:50:52 +0000780 reply = 'Will ignore next '
Guido van Rossum08454592002-07-12 13:10:53 +0000781 if count > 1:
Tim Peters2344fae2001-01-15 00:50:52 +0000782 reply = reply + '%d crossings' % count
783 else:
784 reply = reply + '1 crossing'
Georg Brandl7410dd12010-07-30 12:01:20 +0000785 print(reply + ' of breakpoint %d.' % bp.number, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000786 else:
Georg Brandl7410dd12010-07-30 12:01:20 +0000787 print('Will stop next time breakpoint %d is reached.'
788 % bp.number, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000789
790 def do_clear(self, arg):
791 """Three possibilities, tried in this order:
792 clear -> clear all breaks, ask for confirmation
793 clear file:lineno -> clear all breaks at file:lineno
794 clear bpno bpno ... -> clear breakpoints by number"""
795 if not arg:
796 try:
Guido van Rossumc5b6ab02007-05-27 09:19:52 +0000797 reply = input('Clear all breaks? ')
Tim Peters2344fae2001-01-15 00:50:52 +0000798 except EOFError:
799 reply = 'no'
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000800 reply = reply.strip().lower()
Tim Peters2344fae2001-01-15 00:50:52 +0000801 if reply in ('y', 'yes'):
Georg Brandl7410dd12010-07-30 12:01:20 +0000802 bplist = [bp for bp in bdb.Breakpoint.bpbynumber if bp]
Tim Peters2344fae2001-01-15 00:50:52 +0000803 self.clear_all_breaks()
Georg Brandl7410dd12010-07-30 12:01:20 +0000804 for bp in bplist:
805 print('Deleted %s' % bp, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000806 return
807 if ':' in arg:
808 # Make sure it works for "clear C:\foo\bar.py:12"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000809 i = arg.rfind(':')
Tim Peters2344fae2001-01-15 00:50:52 +0000810 filename = arg[:i]
811 arg = arg[i+1:]
812 try:
813 lineno = int(arg)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000814 except ValueError:
Tim Peters2344fae2001-01-15 00:50:52 +0000815 err = "Invalid line number (%s)" % arg
816 else:
Georg Brandl7410dd12010-07-30 12:01:20 +0000817 bplist = self.get_breaks(filename, lineno)
Tim Peters2344fae2001-01-15 00:50:52 +0000818 err = self.clear_break(filename, lineno)
Georg Brandl7410dd12010-07-30 12:01:20 +0000819 if err:
820 print('***', err, file=self.stdout)
821 else:
822 for bp in bplist:
823 print('Deleted %s' % bp, 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:
Georg Brandl7410dd12010-07-30 12:01:20 +0000828 bp = self.get_bpbynumber(i)
829 except ValueError as err:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000830 print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000831 else:
Georg Brandl7410dd12010-07-30 12:01:20 +0000832 self.clear_break(bp.file, bp.line)
833 print('Deleted %s' % bp, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000834 do_cl = do_clear # 'c' is already an abbreviation for 'continue'
835
836 def do_where(self, arg):
837 self.print_stack_trace()
838 do_w = do_where
Guido van Rossum6bd68352001-01-20 17:57:37 +0000839 do_bt = do_where
Tim Peters2344fae2001-01-15 00:50:52 +0000840
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000841 def _select_frame(self, number):
842 assert 0 <= number < len(self.stack)
843 self.curindex = number
844 self.curframe = self.stack[self.curindex][0]
845 self.curframe_locals = self.curframe.f_locals
846 self.print_stack_entry(self.stack[self.curindex])
847 self.lineno = None
848
Tim Peters2344fae2001-01-15 00:50:52 +0000849 def do_up(self, arg):
850 if self.curindex == 0:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000851 print('*** Oldest frame', file=self.stdout)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000852 return
853 try:
854 count = int(arg or 1)
855 except ValueError:
856 print('*** Invalid frame count (%s)' % arg, file=self.stdout)
857 return
858 if count < 0:
859 newframe = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000860 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000861 newframe = max(0, self.curindex - count)
862 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000863 do_u = do_up
864
865 def do_down(self, arg):
866 if self.curindex + 1 == len(self.stack):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000867 print('*** Newest frame', file=self.stdout)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000868 return
869 try:
870 count = int(arg or 1)
871 except ValueError:
872 print('*** Invalid frame count (%s)' % arg, file=self.stdout)
873 return
874 if count < 0:
875 newframe = len(self.stack) - 1
Tim Peters2344fae2001-01-15 00:50:52 +0000876 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000877 newframe = min(len(self.stack) - 1, self.curindex + count)
878 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000879 do_d = do_down
880
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000881 def do_until(self, arg):
Georg Brandl2dfec552010-07-30 08:43:32 +0000882 if arg:
883 try:
884 lineno = int(arg)
885 except ValueError:
886 print('*** Error in argument:', repr(arg), file=self.stdout)
887 return
888 if lineno <= self.curframe.f_lineno:
889 print('*** "until" line number is smaller than current '
890 'line number', file=self.stdout)
891 return
892 else:
893 lineno = None
894 self.set_until(self.curframe, lineno)
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000895 return 1
896 do_unt = do_until
897
Tim Peters2344fae2001-01-15 00:50:52 +0000898 def do_step(self, arg):
899 self.set_step()
900 return 1
901 do_s = do_step
902
903 def do_next(self, arg):
904 self.set_next(self.curframe)
905 return 1
906 do_n = do_next
907
Guido van Rossumd8faa362007-04-27 19:54:29 +0000908 def do_run(self, arg):
Georg Brandl3078df02009-05-05 09:11:31 +0000909 """Restart program by raising an exception to be caught in the main
910 debugger loop. If arguments were given, set them in sys.argv."""
Guido van Rossumd8faa362007-04-27 19:54:29 +0000911 if arg:
912 import shlex
913 argv0 = sys.argv[0:1]
914 sys.argv = shlex.split(arg)
915 sys.argv[:0] = argv0
916 raise Restart
917
918 do_restart = do_run
919
Tim Peters2344fae2001-01-15 00:50:52 +0000920 def do_return(self, arg):
921 self.set_return(self.curframe)
922 return 1
923 do_r = do_return
924
925 def do_continue(self, arg):
926 self.set_continue()
927 return 1
928 do_c = do_cont = do_continue
929
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000930 def do_jump(self, arg):
931 if self.curindex + 1 != len(self.stack):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000932 print("*** You can only jump within the bottom frame", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000933 return
934 try:
935 arg = int(arg)
936 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000937 print("*** The 'jump' command requires a line number.", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000938 else:
939 try:
940 # Do the jump, fix up our copy of the stack, and display the
941 # new position
942 self.curframe.f_lineno = arg
943 self.stack[self.curindex] = self.stack[self.curindex][0], arg
944 self.print_stack_entry(self.stack[self.curindex])
Guido van Rossumb940e112007-01-10 16:19:56 +0000945 except ValueError as e:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000946 print('*** Jump failed:', e, file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000947 do_j = do_jump
948
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000949 def do_debug(self, arg):
950 sys.settrace(None)
951 globals = self.curframe.f_globals
Benjamin Petersond23f8222009-04-05 19:13:16 +0000952 locals = self.curframe_locals
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000953 p = Pdb(self.completekey, self.stdin, self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000954 p.prompt = "(%s) " % self.prompt.strip()
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000955 print("ENTERING RECURSIVE DEBUGGER", file=self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000956 sys.call_tracing(p.run, (arg, globals, locals))
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000957 print("LEAVING RECURSIVE DEBUGGER", file=self.stdout)
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000958 sys.settrace(self.trace_dispatch)
959 self.lastcmd = p.lastcmd
960
Tim Peters2344fae2001-01-15 00:50:52 +0000961 def do_quit(self, arg):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000962 self._user_requested_quit = 1
Tim Peters2344fae2001-01-15 00:50:52 +0000963 self.set_quit()
964 return 1
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000965
Tim Peters2344fae2001-01-15 00:50:52 +0000966 do_q = do_quit
Guido van Rossumd1c08f32002-04-15 00:48:24 +0000967 do_exit = do_quit
Tim Peters2344fae2001-01-15 00:50:52 +0000968
Guido van Rossumeef26072003-01-13 21:13:55 +0000969 def do_EOF(self, arg):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000970 print(file=self.stdout)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000971 self._user_requested_quit = 1
Guido van Rossumeef26072003-01-13 21:13:55 +0000972 self.set_quit()
973 return 1
974
Tim Peters2344fae2001-01-15 00:50:52 +0000975 def do_args(self, arg):
Benjamin Petersond23f8222009-04-05 19:13:16 +0000976 co = self.curframe.f_code
977 dict = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000978 n = co.co_argcount
979 if co.co_flags & 4: n = n+1
980 if co.co_flags & 8: n = n+1
981 for i in range(n):
982 name = co.co_varnames[i]
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000983 print(name, '=', end=' ', file=self.stdout)
984 if name in dict: print(dict[name], file=self.stdout)
985 else: print("*** undefined ***", file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000986 do_a = do_args
Guido van Rossum2424f851998-09-11 22:50:09 +0000987
Tim Peters2344fae2001-01-15 00:50:52 +0000988 def do_retval(self, arg):
Benjamin Petersond23f8222009-04-05 19:13:16 +0000989 if '__return__' in self.curframe_locals:
990 print(self.curframe_locals['__return__'], file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000991 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000992 print('*** Not yet returned!', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000993 do_rv = do_retval
Guido van Rossum2424f851998-09-11 22:50:09 +0000994
Barry Warsaw210bd202002-11-05 22:40:20 +0000995 def _getval(self, arg):
Tim Peters2344fae2001-01-15 00:50:52 +0000996 try:
Benjamin Petersond23f8222009-04-05 19:13:16 +0000997 return eval(arg, self.curframe.f_globals, self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000998 except:
999 t, v = sys.exc_info()[:2]
Barry Warsaw210bd202002-11-05 22:40:20 +00001000 if isinstance(t, str):
Tim Peters2344fae2001-01-15 00:50:52 +00001001 exc_type_name = t
1002 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001003 print('***', exc_type_name + ':', repr(v), file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001004 raise
Guido van Rossum2424f851998-09-11 22:50:09 +00001005
Barry Warsaw210bd202002-11-05 22:40:20 +00001006 def do_p(self, arg):
1007 try:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001008 print(repr(self._getval(arg)), file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001009 except:
1010 pass
Georg Brandlc9879242007-09-04 07:07:56 +00001011 # make "print" an alias of "p" since print isn't a Python statement anymore
1012 do_print = do_p
Barry Warsaw210bd202002-11-05 22:40:20 +00001013
1014 def do_pp(self, arg):
1015 try:
Thomas Wouters477c8d52006-05-27 19:21:47 +00001016 pprint.pprint(self._getval(arg), self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001017 except:
1018 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001019
Tim Peters2344fae2001-01-15 00:50:52 +00001020 def do_list(self, arg):
1021 self.lastcmd = 'list'
1022 last = None
Georg Brandla91a94b2010-07-30 07:14:01 +00001023 if arg and arg != '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001024 try:
1025 x = eval(arg, {}, {})
1026 if type(x) == type(()):
1027 first, last = x
1028 first = int(first)
1029 last = int(last)
1030 if last < first:
1031 # Assume it's a count
1032 last = first + last
1033 else:
1034 first = max(1, int(x) - 5)
1035 except:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001036 print('*** Error in argument:', repr(arg), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001037 return
Georg Brandla91a94b2010-07-30 07:14:01 +00001038 elif self.lineno is None or arg == '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001039 first = max(1, self.curframe.f_lineno - 5)
1040 else:
1041 first = self.lineno + 1
1042 if last is None:
1043 last = first + 10
1044 filename = self.curframe.f_code.co_filename
1045 breaklist = self.get_file_breaks(filename)
1046 try:
1047 for lineno in range(first, last+1):
Georg Brandl3078df02009-05-05 09:11:31 +00001048 line = linecache.getline(filename, lineno,
1049 self.curframe.f_globals)
Tim Peters2344fae2001-01-15 00:50:52 +00001050 if not line:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001051 print('[EOF]', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001052 break
1053 else:
Walter Dörwald70a6b492004-02-12 17:35:32 +00001054 s = repr(lineno).rjust(3)
Tim Peters2344fae2001-01-15 00:50:52 +00001055 if len(s) < 4: s = s + ' '
1056 if lineno in breaklist: s = s + 'B'
1057 else: s = s + ' '
1058 if lineno == self.curframe.f_lineno:
1059 s = s + '->'
Guido van Rossumceae3752007-02-09 22:16:54 +00001060 print(s + '\t' + line, end='', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001061 self.lineno = lineno
1062 except KeyboardInterrupt:
1063 pass
1064 do_l = do_list
Guido van Rossum2424f851998-09-11 22:50:09 +00001065
Tim Peters2344fae2001-01-15 00:50:52 +00001066 def do_whatis(self, arg):
1067 try:
1068 value = eval(arg, self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +00001069 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +00001070 except:
1071 t, v = sys.exc_info()[:2]
1072 if type(t) == type(''):
1073 exc_type_name = t
1074 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001075 print('***', exc_type_name + ':', repr(v), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001076 return
1077 code = None
1078 # Is it a function?
Neal Norwitz221085d2007-02-25 20:55:47 +00001079 try: code = value.__code__
Tim Peters2344fae2001-01-15 00:50:52 +00001080 except: pass
1081 if code:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001082 print('Function', code.co_name, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001083 return
1084 # Is it an instance method?
Christian Heimesff737952007-11-27 10:40:20 +00001085 try: code = value.__func__.__code__
Tim Peters2344fae2001-01-15 00:50:52 +00001086 except: pass
1087 if code:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001088 print('Method', code.co_name, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001089 return
1090 # None of the above...
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001091 print(type(value), file=self.stdout)
Guido van Rossum8e2ec561993-07-29 09:37:38 +00001092
Tim Peters2344fae2001-01-15 00:50:52 +00001093 def do_alias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001094 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001095 if len(args) == 0:
Benjamin Petersonbe74a372009-09-11 21:17:13 +00001096 keys = sorted(self.aliases.keys())
Tim Peters2344fae2001-01-15 00:50:52 +00001097 for alias in keys:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001098 print("%s = %s" % (alias, self.aliases[alias]), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001099 return
Guido van Rossum08454592002-07-12 13:10:53 +00001100 if args[0] in self.aliases and len(args) == 1:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001101 print("%s = %s" % (args[0], self.aliases[args[0]]), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001102 else:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001103 self.aliases[args[0]] = ' '.join(args[1:])
Guido van Rossum23efba41992-01-27 16:58:47 +00001104
Tim Peters2344fae2001-01-15 00:50:52 +00001105 def do_unalias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001106 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001107 if len(args) == 0: return
Raymond Hettinger54f02222002-06-01 14:18:47 +00001108 if args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +00001109 del self.aliases[args[0]]
Guido van Rossum00230781993-03-29 11:39:45 +00001110
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001111 #list of all the commands making the program resume execution.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001112 commands_resuming = ['do_continue', 'do_step', 'do_next', 'do_return',
1113 'do_quit', 'do_jump']
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001114
Tim Peters2344fae2001-01-15 00:50:52 +00001115 # Print a traceback starting at the top stack frame.
1116 # The most recently entered frame is printed last;
1117 # this is different from dbx and gdb, but consistent with
1118 # the Python interpreter's stack trace.
1119 # It is also consistent with the up/down commands (which are
1120 # compatible with dbx and gdb: up moves towards 'main()'
1121 # and down moves towards the most recent stack frame).
Guido van Rossum2424f851998-09-11 22:50:09 +00001122
Tim Peters2344fae2001-01-15 00:50:52 +00001123 def print_stack_trace(self):
1124 try:
1125 for frame_lineno in self.stack:
1126 self.print_stack_entry(frame_lineno)
1127 except KeyboardInterrupt:
1128 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001129
Tim Peters2344fae2001-01-15 00:50:52 +00001130 def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix):
1131 frame, lineno = frame_lineno
1132 if frame is self.curframe:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001133 print('>', end=' ', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001134 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001135 print(' ', end=' ', file=self.stdout)
1136 print(self.format_stack_entry(frame_lineno,
1137 prompt_prefix), file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001138
Guido van Rossum921c8241992-01-10 14:54:42 +00001139
Georg Brandl02053ee2010-07-18 10:11:03 +00001140 # Help methods (derived from docstring)
Guido van Rossum921c8241992-01-10 14:54:42 +00001141
Tim Peters2344fae2001-01-15 00:50:52 +00001142 def help_help(self):
1143 self.help_h()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001144
Tim Peters2344fae2001-01-15 00:50:52 +00001145 def help_h(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001146 print("""h(elp)
Tim Peters2344fae2001-01-15 00:50:52 +00001147Without argument, print the list of available commands.
1148With a command name as argument, print help about that command
Georg Brandl55353ca2010-07-19 08:02:46 +00001149"help pdb" shows the full pdb documentation
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001150"help exec" gives help on the ! command""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001151
Tim Peters2344fae2001-01-15 00:50:52 +00001152 def help_where(self):
1153 self.help_w()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001154
Tim Peters2344fae2001-01-15 00:50:52 +00001155 def help_w(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001156 print("""w(here)
Tim Peters2344fae2001-01-15 00:50:52 +00001157Print a stack trace, with the most recent frame at the bottom.
1158An arrow indicates the "current frame", which determines the
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001159context of most commands. 'bt' is an alias for this command.""", file=self.stdout)
Guido van Rossum6bd68352001-01-20 17:57:37 +00001160
1161 help_bt = help_w
Guido van Rossumb6775db1994-08-01 11:34:53 +00001162
Tim Peters2344fae2001-01-15 00:50:52 +00001163 def help_down(self):
1164 self.help_d()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001165
Tim Peters2344fae2001-01-15 00:50:52 +00001166 def help_d(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001167 print("""d(own)
Tim Peters2344fae2001-01-15 00:50:52 +00001168Move the current frame one level down in the stack trace
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001169(to a newer frame).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001170
Tim Peters2344fae2001-01-15 00:50:52 +00001171 def help_up(self):
1172 self.help_u()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001173
Tim Peters2344fae2001-01-15 00:50:52 +00001174 def help_u(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001175 print("""u(p)
Tim Peters2344fae2001-01-15 00:50:52 +00001176Move the current frame one level up in the stack trace
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001177(to an older frame).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001178
Tim Peters2344fae2001-01-15 00:50:52 +00001179 def help_break(self):
1180 self.help_b()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001181
Tim Peters2344fae2001-01-15 00:50:52 +00001182 def help_b(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001183 print("""b(reak) ([file:]lineno | function) [, condition]
Tim Peters2344fae2001-01-15 00:50:52 +00001184With a line number argument, set a break there in the current
1185file. With a function name, set a break at first executable line
1186of that function. Without argument, list all breaks. If a second
1187argument is present, it is a string specifying an expression
1188which must evaluate to true before the breakpoint is honored.
Guido van Rossumb6775db1994-08-01 11:34:53 +00001189
Tim Peters2344fae2001-01-15 00:50:52 +00001190The line number may be prefixed with a filename and a colon,
1191to specify a breakpoint in another file (probably one that
1192hasn't been loaded yet). The file is searched for on sys.path;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001193the .py suffix may be omitted.""", file=self.stdout)
Guido van Rossumb5699c71998-07-20 23:13:54 +00001194
Tim Peters2344fae2001-01-15 00:50:52 +00001195 def help_clear(self):
1196 self.help_cl()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001197
Tim Peters2344fae2001-01-15 00:50:52 +00001198 def help_cl(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001199 print("cl(ear) filename:lineno", file=self.stdout)
1200 print("""cl(ear) [bpnumber [bpnumber...]]
Tim Peters2344fae2001-01-15 00:50:52 +00001201With a space separated list of breakpoint numbers, clear
1202those breakpoints. Without argument, clear all breaks (but
1203first ask confirmation). With a filename:lineno argument,
Georg Brandld348b252008-01-05 20:00:55 +00001204clear all breaks at that line in that file.""", file=self.stdout)
Guido van Rossumb5699c71998-07-20 23:13:54 +00001205
Tim Peters2344fae2001-01-15 00:50:52 +00001206 def help_tbreak(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001207 print("""tbreak same arguments as break, but breakpoint is
1208removed when first hit.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001209
Tim Peters2344fae2001-01-15 00:50:52 +00001210 def help_enable(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001211 print("""enable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +00001212Enables the breakpoints given as a space separated list of
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001213bp numbers.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001214
Tim Peters2344fae2001-01-15 00:50:52 +00001215 def help_disable(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001216 print("""disable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +00001217Disables the breakpoints given as a space separated list of
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001218bp numbers.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001219
Tim Peters2344fae2001-01-15 00:50:52 +00001220 def help_ignore(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001221 print("""ignore bpnumber count
Tim Peters2344fae2001-01-15 00:50:52 +00001222Sets the ignore count for the given breakpoint number. A breakpoint
1223becomes active when the ignore count is zero. When non-zero, the
1224count is decremented each time the breakpoint is reached and the
1225breakpoint is not disabled and any associated condition evaluates
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001226to true.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001227
Tim Peters2344fae2001-01-15 00:50:52 +00001228 def help_condition(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001229 print("""condition bpnumber str_condition
Tim Peters2344fae2001-01-15 00:50:52 +00001230str_condition is a string specifying an expression which
1231must evaluate to true before the breakpoint is honored.
1232If str_condition is absent, any existing condition is removed;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001233i.e., the breakpoint is made unconditional.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001234
Tim Peters2344fae2001-01-15 00:50:52 +00001235 def help_step(self):
1236 self.help_s()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001237
Tim Peters2344fae2001-01-15 00:50:52 +00001238 def help_s(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001239 print("""s(tep)
Tim Peters2344fae2001-01-15 00:50:52 +00001240Execute the current line, stop at the first possible occasion
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001241(either in a function that is called or in the current function).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001242
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +00001243 def help_until(self):
1244 self.help_unt()
1245
1246 def help_unt(self):
1247 print("""unt(il)
1248Continue execution until the line with a number greater than the current
1249one is reached or until the current frame returns""")
1250
Tim Peters2344fae2001-01-15 00:50:52 +00001251 def help_next(self):
1252 self.help_n()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001253
Tim Peters2344fae2001-01-15 00:50:52 +00001254 def help_n(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001255 print("""n(ext)
Tim Peters2344fae2001-01-15 00:50:52 +00001256Continue execution until the next line in the current function
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001257is reached or it returns.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001258
Tim Peters2344fae2001-01-15 00:50:52 +00001259 def help_return(self):
1260 self.help_r()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001261
Tim Peters2344fae2001-01-15 00:50:52 +00001262 def help_r(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001263 print("""r(eturn)
1264Continue execution until the current function returns.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001265
Tim Peters2344fae2001-01-15 00:50:52 +00001266 def help_continue(self):
1267 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001268
Tim Peters2344fae2001-01-15 00:50:52 +00001269 def help_cont(self):
1270 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001271
Tim Peters2344fae2001-01-15 00:50:52 +00001272 def help_c(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001273 print("""c(ont(inue))
1274Continue execution, only stop when a breakpoint is encountered.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001275
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001276 def help_jump(self):
1277 self.help_j()
1278
1279 def help_j(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001280 print("""j(ump) lineno
1281Set the next line that will be executed.""", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001282
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001283 def help_debug(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001284 print("""debug code
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001285Enter a recursive debugger that steps through the code argument
1286(which is an arbitrary expression or statement to be executed
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001287in the current environment).""", file=self.stdout)
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001288
Tim Peters2344fae2001-01-15 00:50:52 +00001289 def help_list(self):
1290 self.help_l()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001291
Tim Peters2344fae2001-01-15 00:50:52 +00001292 def help_l(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001293 print("""l(ist) [first [,last]]
Tim Peters2344fae2001-01-15 00:50:52 +00001294List source code for the current file.
1295Without arguments, list 11 lines around the current line
1296or continue the previous listing.
1297With one argument, list 11 lines starting at that line.
1298With two arguments, list the given range;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001299if the second argument is less than the first, it is a count.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001300
Tim Peters2344fae2001-01-15 00:50:52 +00001301 def help_args(self):
1302 self.help_a()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001303
Tim Peters2344fae2001-01-15 00:50:52 +00001304 def help_a(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001305 print("""a(rgs)
1306Print the arguments of the current function.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001307
Tim Peters2344fae2001-01-15 00:50:52 +00001308 def help_p(self):
Georg Brandlc9879242007-09-04 07:07:56 +00001309 print("""p(rint) expression
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001310Print the value of the expression.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001311
Barry Warsaw210bd202002-11-05 22:40:20 +00001312 def help_pp(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001313 print("""pp expression
1314Pretty-print the value of the expression.""", file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001315
Tim Peters2344fae2001-01-15 00:50:52 +00001316 def help_exec(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001317 print("""(!) statement
Tim Peters2344fae2001-01-15 00:50:52 +00001318Execute the (one-line) statement in the context of
1319the current stack frame.
1320The exclamation point can be omitted unless the first word
1321of the statement resembles a debugger command.
1322To assign to a global variable you must always prefix the
1323command with a 'global' command, e.g.:
1324(Pdb) global list_options; list_options = ['-l']
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001325(Pdb)""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001326
Guido van Rossumd8faa362007-04-27 19:54:29 +00001327 def help_run(self):
1328 print("""run [args...]
1329Restart the debugged python program. If a string is supplied, it is
1330splitted with "shlex" and the result is used as the new sys.argv.
1331History, breakpoints, actions and debugger options are preserved.
1332"restart" is an alias for "run".""")
1333
1334 help_restart = help_run
1335
Tim Peters2344fae2001-01-15 00:50:52 +00001336 def help_quit(self):
1337 self.help_q()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001338
Tim Peters2344fae2001-01-15 00:50:52 +00001339 def help_q(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001340 print("""q(uit) or exit - Quit from the debugger.
1341The program being executed is aborted.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001342
Guido van Rossumd1c08f32002-04-15 00:48:24 +00001343 help_exit = help_q
1344
Tim Peters2344fae2001-01-15 00:50:52 +00001345 def help_whatis(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001346 print("""whatis arg
1347Prints the type of the argument.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001348
Tim Peters2344fae2001-01-15 00:50:52 +00001349 def help_EOF(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001350 print("""EOF
1351Handles the receipt of EOF as a command.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001352
Tim Peters2344fae2001-01-15 00:50:52 +00001353 def help_alias(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001354 print("""alias [name [command [parameter parameter ...] ]]
Tim Peters2344fae2001-01-15 00:50:52 +00001355Creates an alias called 'name' the executes 'command'. The command
1356must *not* be enclosed in quotes. Replaceable parameters are
1357indicated by %1, %2, and so on, while %* is replaced by all the
1358parameters. If no command is given, the current alias for name
1359is shown. If no name is given, all aliases are listed.
Guido van Rossum2424f851998-09-11 22:50:09 +00001360
Tim Peters2344fae2001-01-15 00:50:52 +00001361Aliases may be nested and can contain anything that can be
1362legally typed at the pdb prompt. Note! You *can* override
1363internal pdb commands with aliases! Those internal commands
1364are then hidden until the alias is removed. Aliasing is recursively
1365applied to the first word of the command line; all other words
1366in the line are left alone.
Guido van Rossum2424f851998-09-11 22:50:09 +00001367
Tim Peters2344fae2001-01-15 00:50:52 +00001368Some useful aliases (especially when placed in the .pdbrc file) are:
Guido van Rossum2424f851998-09-11 22:50:09 +00001369
Tim Peters2344fae2001-01-15 00:50:52 +00001370#Print instance variables (usage "pi classInst")
1371alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
Guido van Rossum2424f851998-09-11 22:50:09 +00001372
Tim Peters2344fae2001-01-15 00:50:52 +00001373#Print instance variables in self
1374alias ps pi self
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001375""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001376
Tim Peters2344fae2001-01-15 00:50:52 +00001377 def help_unalias(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001378 print("""unalias name
1379Deletes the specified alias.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001380
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001381 def help_commands(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001382 print("""commands [bpnumber]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001383(com) ...
1384(com) end
1385(Pdb)
1386
1387Specify a list of commands for breakpoint number bpnumber. The
1388commands themselves appear on the following lines. Type a line
1389containing just 'end' to terminate the commands.
1390
1391To remove all commands from a breakpoint, type commands and
1392follow it immediately with end; that is, give no commands.
1393
1394With no bpnumber argument, commands refers to the last
1395breakpoint set.
1396
1397You can use breakpoint commands to start your program up again.
1398Simply use the continue command, or step, or any other
1399command that resumes execution.
1400
1401Specifying any command resuming execution (currently continue,
1402step, next, return, jump, quit and their abbreviations) terminates
1403the command list (as if that command was immediately followed by end).
1404This is because any time you resume execution
1405(even with a simple next or step), you may encounter
1406another breakpoint--which could have its own command list, leading to
1407ambiguities about which list to execute.
1408
1409 If you use the 'silent' command in the command list, the
1410usual message about stopping at a breakpoint is not printed. This may
1411be desirable for breakpoints that are to print a specific message and
1412then continue. If none of the other commands print anything, you
1413see no sign that the breakpoint was reached.
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001414""", file=self.stdout)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001415
Tim Peters2344fae2001-01-15 00:50:52 +00001416 def help_pdb(self):
1417 help()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001418
Tim Peters2344fae2001-01-15 00:50:52 +00001419 def lookupmodule(self, filename):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001420 """Helper function for break/clear parsing -- may be overridden.
1421
1422 lookupmodule() translates (possibly incomplete) file or module name
1423 into an absolute file name.
1424 """
1425 if os.path.isabs(filename) and os.path.exists(filename):
Tim Peterse718f612004-10-12 21:51:32 +00001426 return filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001427 f = os.path.join(sys.path[0], filename)
1428 if os.path.exists(f) and self.canonic(f) == self.mainpyfile:
1429 return f
Tim Peters2344fae2001-01-15 00:50:52 +00001430 root, ext = os.path.splitext(filename)
1431 if ext == '':
1432 filename = filename + '.py'
1433 if os.path.isabs(filename):
1434 return filename
1435 for dirname in sys.path:
1436 while os.path.islink(dirname):
1437 dirname = os.readlink(dirname)
1438 fullname = os.path.join(dirname, filename)
1439 if os.path.exists(fullname):
1440 return fullname
1441 return None
Guido van Rossumb5699c71998-07-20 23:13:54 +00001442
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001443 def _runscript(self, filename):
Guido van Rossumd8faa362007-04-27 19:54:29 +00001444 # The script has to run in __main__ namespace (or imports from
1445 # __main__ will break).
1446 #
1447 # So we clear up the __main__ and set several special variables
1448 # (this gets rid of pdb's globals and cleans old variables on restarts).
1449 import __main__
1450 __main__.__dict__.clear()
1451 __main__.__dict__.update({"__name__" : "__main__",
1452 "__file__" : filename,
1453 "__builtins__": __builtins__,
1454 })
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001455
1456 # When bdb sets tracing, a number of call and line events happens
1457 # BEFORE debugger even reaches user's code (and the exact sequence of
1458 # events depends on python version). So we take special measures to
1459 # avoid stopping before we reach the main script (see user_line and
1460 # user_call for details).
1461 self._wait_for_mainpyfile = 1
1462 self.mainpyfile = self.canonic(filename)
1463 self._user_requested_quit = 0
Georg Brandld07ac642009-08-13 07:50:57 +00001464 with open(filename, "rb") as fp:
1465 statement = "exec(compile(%r, %r, 'exec'))" % \
1466 (fp.read(), self.mainpyfile)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001467 self.run(statement)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001468
Guido van Rossum35771131992-09-08 11:59:04 +00001469# Simplified interface
1470
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001471def run(statement, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001472 Pdb().run(statement, globals, locals)
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001473
1474def runeval(expression, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001475 return Pdb().runeval(expression, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001476
1477def runctx(statement, globals, locals):
Tim Peters2344fae2001-01-15 00:50:52 +00001478 # B/W compatibility
1479 run(statement, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001480
Raymond Hettinger2ef7e6c2004-10-24 00:32:24 +00001481def runcall(*args, **kwds):
1482 return Pdb().runcall(*args, **kwds)
Guido van Rossum4e160981992-09-02 20:43:20 +00001483
Guido van Rossumb6775db1994-08-01 11:34:53 +00001484def set_trace():
Johannes Gijsbers84a6c202004-11-07 11:35:30 +00001485 Pdb().set_trace(sys._getframe().f_back)
Guido van Rossum35771131992-09-08 11:59:04 +00001486
1487# Post-Mortem interface
1488
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001489def post_mortem(t=None):
1490 # handling the default
1491 if t is None:
1492 # sys.exc_info() returns (type, value, traceback) if an exception is
1493 # being handled, otherwise it returns None
1494 t = sys.exc_info()[2]
1495 if t is None:
1496 raise ValueError("A valid traceback must be passed if no "
1497 "exception is being handled")
1498
Tim Peters2344fae2001-01-15 00:50:52 +00001499 p = Pdb()
1500 p.reset()
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001501 p.interaction(None, t)
Guido van Rossum35771131992-09-08 11:59:04 +00001502
1503def pm():
Tim Peters2344fae2001-01-15 00:50:52 +00001504 post_mortem(sys.last_traceback)
Guido van Rossum35771131992-09-08 11:59:04 +00001505
1506
1507# Main program for testing
1508
Guido van Rossum23efba41992-01-27 16:58:47 +00001509TESTCMD = 'import x; x.main()'
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001510
Guido van Rossum921c8241992-01-10 14:54:42 +00001511def test():
Tim Peters2344fae2001-01-15 00:50:52 +00001512 run(TESTCMD)
Guido van Rossume61fa0a1993-10-22 13:56:35 +00001513
1514# print help
1515def help():
Georg Brandl02053ee2010-07-18 10:11:03 +00001516 import pydoc
1517 pydoc.pager(__doc__)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001518
Georg Brandle0230912010-07-30 08:29:39 +00001519_usage = """\
1520usage: pdb.py [-c command] ... pyfile [arg] ...
1521
1522Debug the Python program given by pyfile.
1523
1524Initial commands are read from .pdbrc files in your home directory
1525and in the current directory, if they exist. Commands supplied with
1526-c are executed after commands from .pdbrc files.
1527
1528To let the script run until an exception occurs, use "-c continue".
Georg Brandl2dfec552010-07-30 08:43:32 +00001529To let the script run up to a given line X in the debugged file, use
1530"-c 'until X'"."""
Georg Brandle0230912010-07-30 08:29:39 +00001531
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001532def main():
Georg Brandle0230912010-07-30 08:29:39 +00001533 import getopt
1534
1535 opts, args = getopt.getopt(sys.argv[1:], 'hc:', ['--help', '--command='])
1536
1537 if not args:
1538 print(_usage)
Tim Peters2344fae2001-01-15 00:50:52 +00001539 sys.exit(2)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001540
Georg Brandle0230912010-07-30 08:29:39 +00001541 commands = []
1542 for opt, optarg in opts:
1543 if opt in ['-h', '--help']:
1544 print(_usage)
1545 sys.exit()
1546 elif opt in ['-c', '--command']:
1547 commands.append(optarg)
1548
1549 mainpyfile = args[0] # Get script filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001550 if not os.path.exists(mainpyfile):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001551 print('Error:', mainpyfile, 'does not exist')
Tim Peters2344fae2001-01-15 00:50:52 +00001552 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001553
Georg Brandle0230912010-07-30 08:29:39 +00001554 sys.argv[:] = args # Hide "pdb.py" and pdb options from argument list
Guido van Rossumec577d51996-09-10 17:39:34 +00001555
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001556 # Replace pdb's dir with script's dir in front of module search path.
1557 sys.path[0] = os.path.dirname(mainpyfile)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001558
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001559 # Note on saving/restoring sys.argv: it's a good idea when sys.argv was
1560 # modified by the script being debugged. It's a bad idea when it was
Georg Brandl3078df02009-05-05 09:11:31 +00001561 # changed by the user from the command line. There is a "restart" command
1562 # which allows explicit specification of command line arguments.
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001563 pdb = Pdb()
Georg Brandle0230912010-07-30 08:29:39 +00001564 pdb.rcLines.extend(commands)
Georg Brandl1e30bd32010-07-30 07:21:26 +00001565 while True:
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001566 try:
1567 pdb._runscript(mainpyfile)
1568 if pdb._user_requested_quit:
1569 break
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001570 print("The program finished and will be restarted")
Guido van Rossumd8faa362007-04-27 19:54:29 +00001571 except Restart:
1572 print("Restarting", mainpyfile, "with arguments:")
Georg Brandle0230912010-07-30 08:29:39 +00001573 print("\t" + " ".join(args))
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001574 except SystemExit:
1575 # In most cases SystemExit does not warrant a post-mortem session.
Georg Brandle0230912010-07-30 08:29:39 +00001576 print("The program exited via sys.exit(). Exit status:", end=' ')
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001577 print(sys.exc_info()[1])
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001578 except:
1579 traceback.print_exc()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001580 print("Uncaught exception. Entering post mortem debugging")
1581 print("Running 'cont' or 'step' will restart the program")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001582 t = sys.exc_info()[2]
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001583 pdb.interaction(None, t)
Georg Brandl3078df02009-05-05 09:11:31 +00001584 print("Post mortem debugger finished. The " + mainpyfile +
1585 " will be restarted")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001586
1587
1588# When invoked as main program, invoke the debugger on a script
Guido van Rossumd8faa362007-04-27 19:54:29 +00001589if __name__ == '__main__':
1590 import pdb
1591 pdb.main()