blob: b775a1295674b23874f4423d97f429097e7bbf2a [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
74d(own) [ count ]
75 Move the current frame count (default one) levels down in the
76 stack trace (to a newer frame).
77
78u(p) [ count ]
79 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
143unt(il)
144 Continue execution until the line with a number greater than
145 the current one is reached or until the current frame returns.
146
147r(eturn)
148 Continue execution until the current function returns.
149
150run [args...]
151 Restart the debugged python program. If a string is supplied
152 it is splitted with "shlex", and the result is used as the new
153 sys.argv. History, breakpoints, actions and debugger options
154 are preserved. "restart" is an alias for "run".
155
156c(ont(inue))
157 Continue execution, only stop when a breakpoint is encountered.
158
159l(ist) [first [,last]]
160 List source code for the current file.
161 Without arguments, list 11 lines around the current line
162 or continue the previous listing.
Georg Brandla91a94b2010-07-30 07:14:01 +0000163 With . as argument, list 11 lines around the current line.
Georg Brandl02053ee2010-07-18 10:11:03 +0000164 With one argument, list 11 lines starting at that line.
165 With two arguments, list the given range;
166 if the second argument is less than the first, it is a count.
167
168a(rgs)
169 Print the argument list of the current function.
170
171p expression
172 Print the value of the expression.
173
174(!) statement
175 Execute the (one-line) statement in the context of the current
176 stack frame. The exclamation point can be omitted unless the
177 first word of the statement resembles a debugger command. To
178 assign to a global variable you must always prefix the command
179 with a 'global' command, e.g.:
180 (Pdb) global list_options; list_options = ['-l']
181 (Pdb)
182
183
184whatis arg
185 Print the type of the argument.
186
187alias [name [command]]
188 Creates an alias called 'name' that executes 'command'. The
189 command must *not* be enclosed in quotes. Replaceable
190 parameters can be indicated by %1, %2, and so on, while %* is
191 replaced by all the parameters. If no command is given, the
192 current alias for name is shown. If no name is given, all
193 aliases are listed.
194
195 Aliases may be nested and can contain anything that can be
196 legally typed at the pdb prompt. Note! You *can* override
197 internal pdb commands with aliases! Those internal commands
198 are then hidden until the alias is removed. Aliasing is
199 recursively applied to the first word of the command line; all
200 other words in the line are left alone.
201
202 As an example, here are two useful aliases (especially when
203 placed in the .pdbrc file):
204
205 # Print instance variables (usage "pi classInst")
206 alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
207 # Print instance variables in self
208 alias ps pi self
209
210unalias name
211 Delete the specified alias.
212
213q(uit)
214 Quit from the debugger. The program being executed is aborted.
215"""
Guido van Rossum921c8241992-01-10 14:54:42 +0000216
Guido van Rossum921c8241992-01-10 14:54:42 +0000217import sys
218import linecache
Guido van Rossum23efba41992-01-27 16:58:47 +0000219import cmd
220import bdb
Alexandre Vassalotti1f2ba4b2008-05-16 07:12:44 +0000221from reprlib import Repr
Guido van Rossumb5699c71998-07-20 23:13:54 +0000222import os
Barry Warsaw2bee8fe1999-09-09 16:32:41 +0000223import re
Barry Warsaw210bd202002-11-05 22:40:20 +0000224import pprint
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000225import traceback
Guido van Rossumd8faa362007-04-27 19:54:29 +0000226
227
228class Restart(Exception):
229 """Causes a debugger to be restarted for the debugged python program."""
230 pass
231
Guido van Rossumef1b41b2002-09-10 21:57:14 +0000232# Create a custom safe Repr instance and increase its maxstring.
233# The default of 30 truncates error messages too easily.
234_repr = Repr()
235_repr.maxstring = 200
236_saferepr = _repr.repr
237
Skip Montanaro352674d2001-02-07 23:14:30 +0000238__all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace",
239 "post_mortem", "help"]
240
Barry Warsaw2bee8fe1999-09-09 16:32:41 +0000241def find_function(funcname, filename):
Thomas Wouters89f507f2006-12-13 04:49:30 +0000242 cre = re.compile(r'def\s+%s\s*[(]' % re.escape(funcname))
Tim Peters2344fae2001-01-15 00:50:52 +0000243 try:
244 fp = open(filename)
245 except IOError:
246 return None
247 # consumer of this info expects the first line to be 1
248 lineno = 1
249 answer = None
250 while 1:
251 line = fp.readline()
252 if line == '':
253 break
254 if cre.match(line):
255 answer = funcname, filename, lineno
256 break
257 lineno = lineno + 1
258 fp.close()
259 return answer
Guido van Rossum921c8241992-01-10 14:54:42 +0000260
261
Guido van Rossuma558e371994-11-10 22:27:35 +0000262# Interaction prompt line will separate file and call info from code
263# text using value of line_prefix string. A newline and arrow may
264# be to your liking. You can set it once pdb is imported using the
265# command "pdb.line_prefix = '\n% '".
Tim Peters2344fae2001-01-15 00:50:52 +0000266# line_prefix = ': ' # Use this to get the old situation back
267line_prefix = '\n-> ' # Probably a better default
Guido van Rossuma558e371994-11-10 22:27:35 +0000268
Guido van Rossum23efba41992-01-27 16:58:47 +0000269class Pdb(bdb.Bdb, cmd.Cmd):
Guido van Rossum2424f851998-09-11 22:50:09 +0000270
Georg Brandl243ad662009-05-05 09:00:19 +0000271 def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None):
272 bdb.Bdb.__init__(self, skip=skip)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000273 cmd.Cmd.__init__(self, completekey, stdin, stdout)
274 if stdout:
275 self.use_rawinput = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000276 self.prompt = '(Pdb) '
277 self.aliases = {}
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000278 self.mainpyfile = ''
279 self._wait_for_mainpyfile = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000280 # Try to load readline if it exists
281 try:
282 import readline
283 except ImportError:
284 pass
Guido van Rossum2424f851998-09-11 22:50:09 +0000285
Tim Peters2344fae2001-01-15 00:50:52 +0000286 # Read $HOME/.pdbrc and ./.pdbrc
287 self.rcLines = []
Raymond Hettinger54f02222002-06-01 14:18:47 +0000288 if 'HOME' in os.environ:
Tim Peters2344fae2001-01-15 00:50:52 +0000289 envHome = os.environ['HOME']
290 try:
291 rcFile = open(os.path.join(envHome, ".pdbrc"))
292 except IOError:
293 pass
294 else:
295 for line in rcFile.readlines():
296 self.rcLines.append(line)
297 rcFile.close()
298 try:
299 rcFile = open(".pdbrc")
300 except IOError:
301 pass
302 else:
303 for line in rcFile.readlines():
304 self.rcLines.append(line)
305 rcFile.close()
Guido van Rossum23efba41992-01-27 16:58:47 +0000306
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000307 self.commands = {} # associates a command list to breakpoint numbers
Benjamin Petersond23f8222009-04-05 19:13:16 +0000308 self.commands_doprompt = {} # for each bp num, tells if the prompt
309 # must be disp. after execing the cmd list
310 self.commands_silent = {} # for each bp num, tells if the stack trace
311 # must be disp. after execing the cmd list
312 self.commands_defining = False # True while in the process of defining
313 # a command list
314 self.commands_bnum = None # The breakpoint number for which we are
315 # defining a list
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000316
Tim Peters2344fae2001-01-15 00:50:52 +0000317 def reset(self):
318 bdb.Bdb.reset(self)
319 self.forget()
Guido van Rossum23efba41992-01-27 16:58:47 +0000320
Tim Peters2344fae2001-01-15 00:50:52 +0000321 def forget(self):
322 self.lineno = None
323 self.stack = []
324 self.curindex = 0
325 self.curframe = None
Guido van Rossum2424f851998-09-11 22:50:09 +0000326
Tim Peters2344fae2001-01-15 00:50:52 +0000327 def setup(self, f, t):
328 self.forget()
329 self.stack, self.curindex = self.get_stack(f, t)
330 self.curframe = self.stack[self.curindex][0]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000331 # The f_locals dictionary is updated from the actual frame
332 # locals whenever the .f_locals accessor is called, so we
333 # cache it here to ensure that modifications are not overwritten.
334 self.curframe_locals = self.curframe.f_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000335 self.execRcLines()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000336
Tim Peters2344fae2001-01-15 00:50:52 +0000337 # Can be executed earlier than 'setup' if desired
338 def execRcLines(self):
339 if self.rcLines:
340 # Make local copy because of recursion
341 rcLines = self.rcLines
342 # executed only once
343 self.rcLines = []
344 for line in rcLines:
345 line = line[:-1]
Guido van Rossum08454592002-07-12 13:10:53 +0000346 if len(line) > 0 and line[0] != '#':
347 self.onecmd(line)
Guido van Rossum2424f851998-09-11 22:50:09 +0000348
Tim Peters280488b2002-08-23 18:19:30 +0000349 # Override Bdb methods
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000350
351 def user_call(self, frame, argument_list):
352 """This method is called when there is the remote possibility
353 that we ever need to stop in this function."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000354 if self._wait_for_mainpyfile:
355 return
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000356 if self.stop_here(frame):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000357 print('--Call--', file=self.stdout)
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000358 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000359
Tim Peters2344fae2001-01-15 00:50:52 +0000360 def user_line(self, frame):
361 """This function is called when we stop or break at this line."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000362 if self._wait_for_mainpyfile:
363 if (self.mainpyfile != self.canonic(frame.f_code.co_filename)
364 or frame.f_lineno<= 0):
365 return
366 self._wait_for_mainpyfile = 0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000367 if self.bp_commands(frame):
368 self.interaction(frame, None)
369
370 def bp_commands(self,frame):
Georg Brandl3078df02009-05-05 09:11:31 +0000371 """Call every command that was set for the current active breakpoint
372 (if there is one).
373
374 Returns True if the normal interaction function must be called,
375 False otherwise."""
376 # self.currentbp is set in bdb in Bdb.break_here if a breakpoint was hit
377 if getattr(self, "currentbp", False) and \
378 self.currentbp in self.commands:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000379 currentbp = self.currentbp
380 self.currentbp = 0
381 lastcmd_back = self.lastcmd
382 self.setup(frame, None)
383 for line in self.commands[currentbp]:
384 self.onecmd(line)
385 self.lastcmd = lastcmd_back
386 if not self.commands_silent[currentbp]:
387 self.print_stack_entry(self.stack[self.curindex])
388 if self.commands_doprompt[currentbp]:
389 self.cmdloop()
390 self.forget()
391 return
392 return 1
Guido van Rossum9e1ee971997-07-11 13:43:53 +0000393
Tim Peters2344fae2001-01-15 00:50:52 +0000394 def user_return(self, frame, return_value):
395 """This function is called when a return trap is set here."""
396 frame.f_locals['__return__'] = return_value
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000397 print('--Return--', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000398 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000399
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000400 def user_exception(self, frame, exc_info):
Tim Peters2344fae2001-01-15 00:50:52 +0000401 """This function is called if an exception occurs,
402 but only if we are to stop at or just below this level."""
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000403 exc_type, exc_value, exc_traceback = exc_info
Tim Peters2344fae2001-01-15 00:50:52 +0000404 frame.f_locals['__exception__'] = exc_type, exc_value
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000405 exc_type_name = exc_type.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000406 print(exc_type_name + ':', _saferepr(exc_value), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000407 self.interaction(frame, exc_traceback)
Guido van Rossum2424f851998-09-11 22:50:09 +0000408
Tim Peters2344fae2001-01-15 00:50:52 +0000409 # General interaction function
410
411 def interaction(self, frame, traceback):
412 self.setup(frame, traceback)
413 self.print_stack_entry(self.stack[self.curindex])
414 self.cmdloop()
415 self.forget()
416
Benjamin Petersond23f8222009-04-05 19:13:16 +0000417 def displayhook(self, obj):
418 """Custom displayhook for the exec in default(), which prevents
419 assignment of the _ variable in the builtins.
420 """
Georg Brandl9fa2e022009-09-16 16:40:45 +0000421 # reproduce the behavior of the standard displayhook, not printing None
422 if obj is not None:
423 print(repr(obj))
Benjamin Petersond23f8222009-04-05 19:13:16 +0000424
Tim Peters2344fae2001-01-15 00:50:52 +0000425 def default(self, line):
426 if line[:1] == '!': line = line[1:]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000427 locals = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000428 globals = self.curframe.f_globals
429 try:
430 code = compile(line + '\n', '<stdin>', 'single')
Christian Heimes679db4a2008-01-18 09:56:22 +0000431 save_stdout = sys.stdout
432 save_stdin = sys.stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000433 save_displayhook = sys.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000434 try:
435 sys.stdin = self.stdin
436 sys.stdout = self.stdout
Benjamin Petersond23f8222009-04-05 19:13:16 +0000437 sys.displayhook = self.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000438 exec(code, globals, locals)
439 finally:
440 sys.stdout = save_stdout
441 sys.stdin = save_stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000442 sys.displayhook = save_displayhook
Tim Peters2344fae2001-01-15 00:50:52 +0000443 except:
444 t, v = sys.exc_info()[:2]
445 if type(t) == type(''):
446 exc_type_name = t
447 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000448 print('***', exc_type_name + ':', v, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000449
450 def precmd(self, line):
451 """Handle alias expansion and ';;' separator."""
Guido van Rossum08454592002-07-12 13:10:53 +0000452 if not line.strip():
Tim Peters2344fae2001-01-15 00:50:52 +0000453 return line
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000454 args = line.split()
Raymond Hettinger54f02222002-06-01 14:18:47 +0000455 while args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000456 line = self.aliases[args[0]]
457 ii = 1
458 for tmpArg in args[1:]:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000459 line = line.replace("%" + str(ii),
Tim Peters2344fae2001-01-15 00:50:52 +0000460 tmpArg)
461 ii = ii + 1
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000462 line = line.replace("%*", ' '.join(args[1:]))
463 args = line.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000464 # split into ';;' separated commands
465 # unless it's an alias command
466 if args[0] != 'alias':
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000467 marker = line.find(';;')
Tim Peters2344fae2001-01-15 00:50:52 +0000468 if marker >= 0:
469 # queue up everything after marker
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000470 next = line[marker+2:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000471 self.cmdqueue.append(next)
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000472 line = line[:marker].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000473 return line
474
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000475 def onecmd(self, line):
476 """Interpret the argument as though it had been typed in response
477 to the prompt.
478
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000479 Checks whether this line is typed at the normal prompt or in
480 a breakpoint command list definition.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000481 """
482 if not self.commands_defining:
483 return cmd.Cmd.onecmd(self, line)
484 else:
485 return self.handle_command_def(line)
486
487 def handle_command_def(self,line):
488 """ Handles one command line during command list definition. """
489 cmd, arg, line = self.parseline(line)
490 if cmd == 'silent':
491 self.commands_silent[self.commands_bnum] = True
492 return # continue to handle other cmd def in the cmd list
493 elif cmd == 'end':
494 self.cmdqueue = []
495 return 1 # end of cmd list
496 cmdlist = self.commands[self.commands_bnum]
497 if (arg):
498 cmdlist.append(cmd+' '+arg)
499 else:
500 cmdlist.append(cmd)
501 # Determine if we must stop
502 try:
503 func = getattr(self, 'do_' + cmd)
504 except AttributeError:
505 func = self.default
Georg Brandl3078df02009-05-05 09:11:31 +0000506 # one of the resuming commands
507 if func.__name__ in self.commands_resuming:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000508 self.commands_doprompt[self.commands_bnum] = False
509 self.cmdqueue = []
510 return 1
511 return
512
Tim Peters2344fae2001-01-15 00:50:52 +0000513 # Command definitions, called by cmdloop()
514 # The argument is the remaining string on the command line
515 # Return true to exit from the command loop
516
517 do_h = cmd.Cmd.do_help
518
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000519 def do_commands(self, arg):
Georg Brandl3078df02009-05-05 09:11:31 +0000520 """Defines a list of commands associated to a breakpoint.
521
522 Those commands will be executed whenever the breakpoint causes
523 the program to stop execution."""
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000524 if not arg:
525 bnum = len(bdb.Breakpoint.bpbynumber)-1
526 else:
527 try:
528 bnum = int(arg)
529 except:
Georg Brandl3078df02009-05-05 09:11:31 +0000530 print("Usage : commands [bnum]\n ...\n end",
531 file=self.stdout)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000532 return
533 self.commands_bnum = bnum
534 self.commands[bnum] = []
535 self.commands_doprompt[bnum] = True
536 self.commands_silent[bnum] = False
537 prompt_back = self.prompt
538 self.prompt = '(com) '
539 self.commands_defining = True
540 self.cmdloop()
541 self.commands_defining = False
542 self.prompt = prompt_back
543
Tim Peters2344fae2001-01-15 00:50:52 +0000544 def do_break(self, arg, temporary = 0):
545 # break [ ([filename:]lineno | function) [, "condition"] ]
546 if not arg:
547 if self.breaks: # There's at least one
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000548 print("Num Type Disp Enb Where", file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000549 for bp in bdb.Breakpoint.bpbynumber:
550 if bp:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000551 bp.bpprint(self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000552 return
553 # parse arguments; comma has lowest precedence
554 # and cannot occur in filename
555 filename = None
556 lineno = None
557 cond = None
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000558 comma = arg.find(',')
Tim Peters2344fae2001-01-15 00:50:52 +0000559 if comma > 0:
560 # parse stuff after comma: "condition"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000561 cond = arg[comma+1:].lstrip()
562 arg = arg[:comma].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000563 # parse stuff before comma: [filename:]lineno | function
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000564 colon = arg.rfind(':')
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000565 funcname = None
Tim Peters2344fae2001-01-15 00:50:52 +0000566 if colon >= 0:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000567 filename = arg[:colon].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000568 f = self.lookupmodule(filename)
569 if not f:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000570 print('*** ', repr(filename), end=' ', file=self.stdout)
571 print('not found from sys.path', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000572 return
573 else:
574 filename = f
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000575 arg = arg[colon+1:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000576 try:
577 lineno = int(arg)
Guido van Rossumb940e112007-01-10 16:19:56 +0000578 except ValueError as msg:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000579 print('*** Bad lineno:', arg, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000580 return
581 else:
582 # no colon; can be lineno or function
583 try:
584 lineno = int(arg)
585 except ValueError:
586 try:
587 func = eval(arg,
588 self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +0000589 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000590 except:
591 func = arg
592 try:
Christian Heimesff737952007-11-27 10:40:20 +0000593 if hasattr(func, '__func__'):
594 func = func.__func__
Neal Norwitz221085d2007-02-25 20:55:47 +0000595 code = func.__code__
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000596 #use co_name to identify the bkpt (function names
597 #could be aliased, but co_name is invariant)
598 funcname = code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000599 lineno = code.co_firstlineno
600 filename = code.co_filename
601 except:
602 # last thing to try
603 (ok, filename, ln) = self.lineinfo(arg)
604 if not ok:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000605 print('*** The specified object', end=' ', file=self.stdout)
606 print(repr(arg), end=' ', file=self.stdout)
607 print('is not a function', file=self.stdout)
608 print('or was not found along sys.path.', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000609 return
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000610 funcname = ok # ok contains a function name
Tim Peters2344fae2001-01-15 00:50:52 +0000611 lineno = int(ln)
612 if not filename:
613 filename = self.defaultFile()
614 # Check for reasonable breakpoint
615 line = self.checkline(filename, lineno)
616 if line:
617 # now set the break point
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000618 err = self.set_break(filename, line, temporary, cond, funcname)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000619 if err: print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000620 else:
621 bp = self.get_breaks(filename, line)[-1]
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000622 print("Breakpoint %d at %s:%d" % (bp.number,
Thomas Wouters477c8d52006-05-27 19:21:47 +0000623 bp.file,
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000624 bp.line), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000625
626 # To be overridden in derived debuggers
627 def defaultFile(self):
628 """Produce a reasonable default."""
629 filename = self.curframe.f_code.co_filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000630 if filename == '<string>' and self.mainpyfile:
631 filename = self.mainpyfile
Tim Peters2344fae2001-01-15 00:50:52 +0000632 return filename
633
634 do_b = do_break
635
636 def do_tbreak(self, arg):
637 self.do_break(arg, 1)
638
639 def lineinfo(self, identifier):
640 failed = (None, None, None)
641 # Input is identifier, may be in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000642 idstring = identifier.split("'")
Tim Peters2344fae2001-01-15 00:50:52 +0000643 if len(idstring) == 1:
644 # not in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000645 id = idstring[0].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000646 elif len(idstring) == 3:
647 # quoted
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000648 id = idstring[1].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000649 else:
650 return failed
651 if id == '': return failed
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000652 parts = id.split('.')
Tim Peters2344fae2001-01-15 00:50:52 +0000653 # Protection for derived debuggers
654 if parts[0] == 'self':
655 del parts[0]
656 if len(parts) == 0:
657 return failed
658 # Best first guess at file to look at
659 fname = self.defaultFile()
660 if len(parts) == 1:
661 item = parts[0]
662 else:
663 # More than one part.
664 # First is module, second is method/class
665 f = self.lookupmodule(parts[0])
666 if f:
667 fname = f
668 item = parts[1]
669 answer = find_function(item, fname)
670 return answer or failed
671
672 def checkline(self, filename, lineno):
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000673 """Check whether specified line seems to be executable.
Tim Peters2344fae2001-01-15 00:50:52 +0000674
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000675 Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank
676 line or EOF). Warning: testing is not comprehensive.
677 """
Georg Brandl1e30bd32010-07-30 07:21:26 +0000678 # this method should be callable before starting debugging, so default
679 # to "no globals" if there is no current frame
680 globs = self.curframe.f_globals if hasattr(self, 'curframe') else None
681 line = linecache.getline(filename, lineno, globs)
Tim Peters2344fae2001-01-15 00:50:52 +0000682 if not line:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000683 print('End of file', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000684 return 0
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000685 line = line.strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000686 # Don't allow setting breakpoint at a blank line
Guido van Rossum08454592002-07-12 13:10:53 +0000687 if (not line or (line[0] == '#') or
688 (line[:3] == '"""') or line[:3] == "'''"):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000689 print('*** Blank or comment', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000690 return 0
Tim Peters2344fae2001-01-15 00:50:52 +0000691 return lineno
692
693 def do_enable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000694 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000695 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000696 try:
697 i = int(i)
698 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000699 print('Breakpoint index %r is not a number' % i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000700 continue
701
702 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000703 print('No breakpoint numbered', i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000704 continue
705
706 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000707 if bp:
708 bp.enable()
709
710 def do_disable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000711 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000712 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000713 try:
714 i = int(i)
715 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000716 print('Breakpoint index %r is not a number' % i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000717 continue
Tim Petersf545baa2003-06-15 23:26:30 +0000718
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000719 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000720 print('No breakpoint numbered', i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000721 continue
722
723 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000724 if bp:
725 bp.disable()
726
727 def do_condition(self, arg):
728 # arg is breakpoint number and condition
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000729 args = arg.split(' ', 1)
Thomas Woutersb2137042007-02-01 18:02:27 +0000730 try:
731 bpnum = int(args[0].strip())
732 except ValueError:
733 # something went wrong
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000734 print('Breakpoint index %r is not a number' % args[0], file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000735 return
Tim Peters2344fae2001-01-15 00:50:52 +0000736 try:
737 cond = args[1]
738 except:
739 cond = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000740 try:
741 bp = bdb.Breakpoint.bpbynumber[bpnum]
742 except IndexError:
Neal Norwitz752abd02008-05-13 04:55:24 +0000743 print('Breakpoint index %r is not valid' % args[0],
744 file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000745 return
Tim Peters2344fae2001-01-15 00:50:52 +0000746 if bp:
747 bp.cond = cond
748 if not cond:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000749 print('Breakpoint', bpnum, end=' ', file=self.stdout)
750 print('is now unconditional.', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000751
752 def do_ignore(self,arg):
753 """arg is bp number followed by ignore count."""
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000754 args = arg.split()
Thomas Woutersb2137042007-02-01 18:02:27 +0000755 try:
756 bpnum = int(args[0].strip())
757 except ValueError:
758 # something went wrong
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000759 print('Breakpoint index %r is not a number' % args[0], file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000760 return
Tim Peters2344fae2001-01-15 00:50:52 +0000761 try:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000762 count = int(args[1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000763 except:
764 count = 0
Guido van Rossumd8faa362007-04-27 19:54:29 +0000765 try:
766 bp = bdb.Breakpoint.bpbynumber[bpnum]
767 except IndexError:
Neal Norwitz752abd02008-05-13 04:55:24 +0000768 print('Breakpoint index %r is not valid' % args[0],
769 file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000770 return
Tim Peters2344fae2001-01-15 00:50:52 +0000771 if bp:
772 bp.ignore = count
Guido van Rossum08454592002-07-12 13:10:53 +0000773 if count > 0:
Tim Peters2344fae2001-01-15 00:50:52 +0000774 reply = 'Will ignore next '
Guido van Rossum08454592002-07-12 13:10:53 +0000775 if count > 1:
Tim Peters2344fae2001-01-15 00:50:52 +0000776 reply = reply + '%d crossings' % count
777 else:
778 reply = reply + '1 crossing'
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000779 print(reply + ' of breakpoint %d.' % bpnum, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000780 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000781 print('Will stop next time breakpoint', end=' ', file=self.stdout)
782 print(bpnum, 'is reached.', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000783
784 def do_clear(self, arg):
785 """Three possibilities, tried in this order:
786 clear -> clear all breaks, ask for confirmation
787 clear file:lineno -> clear all breaks at file:lineno
788 clear bpno bpno ... -> clear breakpoints by number"""
789 if not arg:
790 try:
Guido van Rossumc5b6ab02007-05-27 09:19:52 +0000791 reply = input('Clear all breaks? ')
Tim Peters2344fae2001-01-15 00:50:52 +0000792 except EOFError:
793 reply = 'no'
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000794 reply = reply.strip().lower()
Tim Peters2344fae2001-01-15 00:50:52 +0000795 if reply in ('y', 'yes'):
796 self.clear_all_breaks()
797 return
798 if ':' in arg:
799 # Make sure it works for "clear C:\foo\bar.py:12"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000800 i = arg.rfind(':')
Tim Peters2344fae2001-01-15 00:50:52 +0000801 filename = arg[:i]
802 arg = arg[i+1:]
803 try:
804 lineno = int(arg)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000805 except ValueError:
Tim Peters2344fae2001-01-15 00:50:52 +0000806 err = "Invalid line number (%s)" % arg
807 else:
808 err = self.clear_break(filename, lineno)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000809 if err: print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000810 return
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000811 numberlist = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000812 for i in numberlist:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000813 try:
814 i = int(i)
815 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000816 print('Breakpoint index %r is not a number' % i, file=self.stdout)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000817 continue
818
Georg Brandl6d2b3462005-08-24 07:36:17 +0000819 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000820 print('No breakpoint numbered', i, file=self.stdout)
Georg Brandl6d2b3462005-08-24 07:36:17 +0000821 continue
Tim Peters2344fae2001-01-15 00:50:52 +0000822 err = self.clear_bpbynumber(i)
823 if err:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000824 print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000825 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000826 print('Deleted breakpoint', i, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000827 do_cl = do_clear # 'c' is already an abbreviation for 'continue'
828
829 def do_where(self, arg):
830 self.print_stack_trace()
831 do_w = do_where
Guido van Rossum6bd68352001-01-20 17:57:37 +0000832 do_bt = do_where
Tim Peters2344fae2001-01-15 00:50:52 +0000833
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000834 def _select_frame(self, number):
835 assert 0 <= number < len(self.stack)
836 self.curindex = number
837 self.curframe = self.stack[self.curindex][0]
838 self.curframe_locals = self.curframe.f_locals
839 self.print_stack_entry(self.stack[self.curindex])
840 self.lineno = None
841
Tim Peters2344fae2001-01-15 00:50:52 +0000842 def do_up(self, arg):
843 if self.curindex == 0:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000844 print('*** Oldest frame', file=self.stdout)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000845 return
846 try:
847 count = int(arg or 1)
848 except ValueError:
849 print('*** Invalid frame count (%s)' % arg, file=self.stdout)
850 return
851 if count < 0:
852 newframe = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000853 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000854 newframe = max(0, self.curindex - count)
855 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000856 do_u = do_up
857
858 def do_down(self, arg):
859 if self.curindex + 1 == len(self.stack):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000860 print('*** Newest frame', file=self.stdout)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000861 return
862 try:
863 count = int(arg or 1)
864 except ValueError:
865 print('*** Invalid frame count (%s)' % arg, file=self.stdout)
866 return
867 if count < 0:
868 newframe = len(self.stack) - 1
Tim Peters2344fae2001-01-15 00:50:52 +0000869 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000870 newframe = min(len(self.stack) - 1, self.curindex + count)
871 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000872 do_d = do_down
873
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000874 def do_until(self, arg):
875 self.set_until(self.curframe)
876 return 1
877 do_unt = do_until
878
Tim Peters2344fae2001-01-15 00:50:52 +0000879 def do_step(self, arg):
880 self.set_step()
881 return 1
882 do_s = do_step
883
884 def do_next(self, arg):
885 self.set_next(self.curframe)
886 return 1
887 do_n = do_next
888
Guido van Rossumd8faa362007-04-27 19:54:29 +0000889 def do_run(self, arg):
Georg Brandl3078df02009-05-05 09:11:31 +0000890 """Restart program by raising an exception to be caught in the main
891 debugger loop. If arguments were given, set them in sys.argv."""
Guido van Rossumd8faa362007-04-27 19:54:29 +0000892 if arg:
893 import shlex
894 argv0 = sys.argv[0:1]
895 sys.argv = shlex.split(arg)
896 sys.argv[:0] = argv0
897 raise Restart
898
899 do_restart = do_run
900
Tim Peters2344fae2001-01-15 00:50:52 +0000901 def do_return(self, arg):
902 self.set_return(self.curframe)
903 return 1
904 do_r = do_return
905
906 def do_continue(self, arg):
907 self.set_continue()
908 return 1
909 do_c = do_cont = do_continue
910
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000911 def do_jump(self, arg):
912 if self.curindex + 1 != len(self.stack):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000913 print("*** You can only jump within the bottom frame", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000914 return
915 try:
916 arg = int(arg)
917 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000918 print("*** The 'jump' command requires a line number.", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000919 else:
920 try:
921 # Do the jump, fix up our copy of the stack, and display the
922 # new position
923 self.curframe.f_lineno = arg
924 self.stack[self.curindex] = self.stack[self.curindex][0], arg
925 self.print_stack_entry(self.stack[self.curindex])
Guido van Rossumb940e112007-01-10 16:19:56 +0000926 except ValueError as e:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000927 print('*** Jump failed:', e, file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000928 do_j = do_jump
929
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000930 def do_debug(self, arg):
931 sys.settrace(None)
932 globals = self.curframe.f_globals
Benjamin Petersond23f8222009-04-05 19:13:16 +0000933 locals = self.curframe_locals
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000934 p = Pdb(self.completekey, self.stdin, self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000935 p.prompt = "(%s) " % self.prompt.strip()
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000936 print("ENTERING RECURSIVE DEBUGGER", file=self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000937 sys.call_tracing(p.run, (arg, globals, locals))
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000938 print("LEAVING RECURSIVE DEBUGGER", file=self.stdout)
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000939 sys.settrace(self.trace_dispatch)
940 self.lastcmd = p.lastcmd
941
Tim Peters2344fae2001-01-15 00:50:52 +0000942 def do_quit(self, arg):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000943 self._user_requested_quit = 1
Tim Peters2344fae2001-01-15 00:50:52 +0000944 self.set_quit()
945 return 1
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000946
Tim Peters2344fae2001-01-15 00:50:52 +0000947 do_q = do_quit
Guido van Rossumd1c08f32002-04-15 00:48:24 +0000948 do_exit = do_quit
Tim Peters2344fae2001-01-15 00:50:52 +0000949
Guido van Rossumeef26072003-01-13 21:13:55 +0000950 def do_EOF(self, arg):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000951 print(file=self.stdout)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000952 self._user_requested_quit = 1
Guido van Rossumeef26072003-01-13 21:13:55 +0000953 self.set_quit()
954 return 1
955
Tim Peters2344fae2001-01-15 00:50:52 +0000956 def do_args(self, arg):
Benjamin Petersond23f8222009-04-05 19:13:16 +0000957 co = self.curframe.f_code
958 dict = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000959 n = co.co_argcount
960 if co.co_flags & 4: n = n+1
961 if co.co_flags & 8: n = n+1
962 for i in range(n):
963 name = co.co_varnames[i]
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000964 print(name, '=', end=' ', file=self.stdout)
965 if name in dict: print(dict[name], file=self.stdout)
966 else: print("*** undefined ***", file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000967 do_a = do_args
Guido van Rossum2424f851998-09-11 22:50:09 +0000968
Tim Peters2344fae2001-01-15 00:50:52 +0000969 def do_retval(self, arg):
Benjamin Petersond23f8222009-04-05 19:13:16 +0000970 if '__return__' in self.curframe_locals:
971 print(self.curframe_locals['__return__'], file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000972 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000973 print('*** Not yet returned!', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000974 do_rv = do_retval
Guido van Rossum2424f851998-09-11 22:50:09 +0000975
Barry Warsaw210bd202002-11-05 22:40:20 +0000976 def _getval(self, arg):
Tim Peters2344fae2001-01-15 00:50:52 +0000977 try:
Benjamin Petersond23f8222009-04-05 19:13:16 +0000978 return eval(arg, self.curframe.f_globals, self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000979 except:
980 t, v = sys.exc_info()[:2]
Barry Warsaw210bd202002-11-05 22:40:20 +0000981 if isinstance(t, str):
Tim Peters2344fae2001-01-15 00:50:52 +0000982 exc_type_name = t
983 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000984 print('***', exc_type_name + ':', repr(v), file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +0000985 raise
Guido van Rossum2424f851998-09-11 22:50:09 +0000986
Barry Warsaw210bd202002-11-05 22:40:20 +0000987 def do_p(self, arg):
988 try:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000989 print(repr(self._getval(arg)), file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +0000990 except:
991 pass
Georg Brandlc9879242007-09-04 07:07:56 +0000992 # make "print" an alias of "p" since print isn't a Python statement anymore
993 do_print = do_p
Barry Warsaw210bd202002-11-05 22:40:20 +0000994
995 def do_pp(self, arg):
996 try:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000997 pprint.pprint(self._getval(arg), self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +0000998 except:
999 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001000
Tim Peters2344fae2001-01-15 00:50:52 +00001001 def do_list(self, arg):
1002 self.lastcmd = 'list'
1003 last = None
Georg Brandla91a94b2010-07-30 07:14:01 +00001004 if arg and arg != '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001005 try:
1006 x = eval(arg, {}, {})
1007 if type(x) == type(()):
1008 first, last = x
1009 first = int(first)
1010 last = int(last)
1011 if last < first:
1012 # Assume it's a count
1013 last = first + last
1014 else:
1015 first = max(1, int(x) - 5)
1016 except:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001017 print('*** Error in argument:', repr(arg), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001018 return
Georg Brandla91a94b2010-07-30 07:14:01 +00001019 elif self.lineno is None or arg == '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001020 first = max(1, self.curframe.f_lineno - 5)
1021 else:
1022 first = self.lineno + 1
1023 if last is None:
1024 last = first + 10
1025 filename = self.curframe.f_code.co_filename
1026 breaklist = self.get_file_breaks(filename)
1027 try:
1028 for lineno in range(first, last+1):
Georg Brandl3078df02009-05-05 09:11:31 +00001029 line = linecache.getline(filename, lineno,
1030 self.curframe.f_globals)
Tim Peters2344fae2001-01-15 00:50:52 +00001031 if not line:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001032 print('[EOF]', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001033 break
1034 else:
Walter Dörwald70a6b492004-02-12 17:35:32 +00001035 s = repr(lineno).rjust(3)
Tim Peters2344fae2001-01-15 00:50:52 +00001036 if len(s) < 4: s = s + ' '
1037 if lineno in breaklist: s = s + 'B'
1038 else: s = s + ' '
1039 if lineno == self.curframe.f_lineno:
1040 s = s + '->'
Guido van Rossumceae3752007-02-09 22:16:54 +00001041 print(s + '\t' + line, end='', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001042 self.lineno = lineno
1043 except KeyboardInterrupt:
1044 pass
1045 do_l = do_list
Guido van Rossum2424f851998-09-11 22:50:09 +00001046
Tim Peters2344fae2001-01-15 00:50:52 +00001047 def do_whatis(self, arg):
1048 try:
1049 value = eval(arg, self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +00001050 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +00001051 except:
1052 t, v = sys.exc_info()[:2]
1053 if type(t) == type(''):
1054 exc_type_name = t
1055 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001056 print('***', exc_type_name + ':', repr(v), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001057 return
1058 code = None
1059 # Is it a function?
Neal Norwitz221085d2007-02-25 20:55:47 +00001060 try: code = value.__code__
Tim Peters2344fae2001-01-15 00:50:52 +00001061 except: pass
1062 if code:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001063 print('Function', code.co_name, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001064 return
1065 # Is it an instance method?
Christian Heimesff737952007-11-27 10:40:20 +00001066 try: code = value.__func__.__code__
Tim Peters2344fae2001-01-15 00:50:52 +00001067 except: pass
1068 if code:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001069 print('Method', code.co_name, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001070 return
1071 # None of the above...
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001072 print(type(value), file=self.stdout)
Guido van Rossum8e2ec561993-07-29 09:37:38 +00001073
Tim Peters2344fae2001-01-15 00:50:52 +00001074 def do_alias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001075 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001076 if len(args) == 0:
Benjamin Petersonbe74a372009-09-11 21:17:13 +00001077 keys = sorted(self.aliases.keys())
Tim Peters2344fae2001-01-15 00:50:52 +00001078 for alias in keys:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001079 print("%s = %s" % (alias, self.aliases[alias]), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001080 return
Guido van Rossum08454592002-07-12 13:10:53 +00001081 if args[0] in self.aliases and len(args) == 1:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001082 print("%s = %s" % (args[0], self.aliases[args[0]]), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001083 else:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001084 self.aliases[args[0]] = ' '.join(args[1:])
Guido van Rossum23efba41992-01-27 16:58:47 +00001085
Tim Peters2344fae2001-01-15 00:50:52 +00001086 def do_unalias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001087 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001088 if len(args) == 0: return
Raymond Hettinger54f02222002-06-01 14:18:47 +00001089 if args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +00001090 del self.aliases[args[0]]
Guido van Rossum00230781993-03-29 11:39:45 +00001091
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001092 #list of all the commands making the program resume execution.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001093 commands_resuming = ['do_continue', 'do_step', 'do_next', 'do_return',
1094 'do_quit', 'do_jump']
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001095
Tim Peters2344fae2001-01-15 00:50:52 +00001096 # Print a traceback starting at the top stack frame.
1097 # The most recently entered frame is printed last;
1098 # this is different from dbx and gdb, but consistent with
1099 # the Python interpreter's stack trace.
1100 # It is also consistent with the up/down commands (which are
1101 # compatible with dbx and gdb: up moves towards 'main()'
1102 # and down moves towards the most recent stack frame).
Guido van Rossum2424f851998-09-11 22:50:09 +00001103
Tim Peters2344fae2001-01-15 00:50:52 +00001104 def print_stack_trace(self):
1105 try:
1106 for frame_lineno in self.stack:
1107 self.print_stack_entry(frame_lineno)
1108 except KeyboardInterrupt:
1109 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001110
Tim Peters2344fae2001-01-15 00:50:52 +00001111 def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix):
1112 frame, lineno = frame_lineno
1113 if frame is self.curframe:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001114 print('>', end=' ', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +00001115 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001116 print(' ', end=' ', file=self.stdout)
1117 print(self.format_stack_entry(frame_lineno,
1118 prompt_prefix), file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001119
Guido van Rossum921c8241992-01-10 14:54:42 +00001120
Georg Brandl02053ee2010-07-18 10:11:03 +00001121 # Help methods (derived from docstring)
Guido van Rossum921c8241992-01-10 14:54:42 +00001122
Tim Peters2344fae2001-01-15 00:50:52 +00001123 def help_help(self):
1124 self.help_h()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001125
Tim Peters2344fae2001-01-15 00:50:52 +00001126 def help_h(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001127 print("""h(elp)
Tim Peters2344fae2001-01-15 00:50:52 +00001128Without argument, print the list of available commands.
1129With a command name as argument, print help about that command
Georg Brandl55353ca2010-07-19 08:02:46 +00001130"help pdb" shows the full pdb documentation
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001131"help exec" gives help on the ! command""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001132
Tim Peters2344fae2001-01-15 00:50:52 +00001133 def help_where(self):
1134 self.help_w()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001135
Tim Peters2344fae2001-01-15 00:50:52 +00001136 def help_w(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001137 print("""w(here)
Tim Peters2344fae2001-01-15 00:50:52 +00001138Print a stack trace, with the most recent frame at the bottom.
1139An arrow indicates the "current frame", which determines the
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001140context of most commands. 'bt' is an alias for this command.""", file=self.stdout)
Guido van Rossum6bd68352001-01-20 17:57:37 +00001141
1142 help_bt = help_w
Guido van Rossumb6775db1994-08-01 11:34:53 +00001143
Tim Peters2344fae2001-01-15 00:50:52 +00001144 def help_down(self):
1145 self.help_d()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001146
Tim Peters2344fae2001-01-15 00:50:52 +00001147 def help_d(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001148 print("""d(own)
Tim Peters2344fae2001-01-15 00:50:52 +00001149Move the current frame one level down in the stack trace
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001150(to a newer frame).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001151
Tim Peters2344fae2001-01-15 00:50:52 +00001152 def help_up(self):
1153 self.help_u()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001154
Tim Peters2344fae2001-01-15 00:50:52 +00001155 def help_u(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001156 print("""u(p)
Tim Peters2344fae2001-01-15 00:50:52 +00001157Move the current frame one level up in the stack trace
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001158(to an older frame).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001159
Tim Peters2344fae2001-01-15 00:50:52 +00001160 def help_break(self):
1161 self.help_b()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001162
Tim Peters2344fae2001-01-15 00:50:52 +00001163 def help_b(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001164 print("""b(reak) ([file:]lineno | function) [, condition]
Tim Peters2344fae2001-01-15 00:50:52 +00001165With a line number argument, set a break there in the current
1166file. With a function name, set a break at first executable line
1167of that function. Without argument, list all breaks. If a second
1168argument is present, it is a string specifying an expression
1169which must evaluate to true before the breakpoint is honored.
Guido van Rossumb6775db1994-08-01 11:34:53 +00001170
Tim Peters2344fae2001-01-15 00:50:52 +00001171The line number may be prefixed with a filename and a colon,
1172to specify a breakpoint in another file (probably one that
1173hasn't been loaded yet). The file is searched for on sys.path;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001174the .py suffix may be omitted.""", file=self.stdout)
Guido van Rossumb5699c71998-07-20 23:13:54 +00001175
Tim Peters2344fae2001-01-15 00:50:52 +00001176 def help_clear(self):
1177 self.help_cl()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001178
Tim Peters2344fae2001-01-15 00:50:52 +00001179 def help_cl(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001180 print("cl(ear) filename:lineno", file=self.stdout)
1181 print("""cl(ear) [bpnumber [bpnumber...]]
Tim Peters2344fae2001-01-15 00:50:52 +00001182With a space separated list of breakpoint numbers, clear
1183those breakpoints. Without argument, clear all breaks (but
1184first ask confirmation). With a filename:lineno argument,
Georg Brandld348b252008-01-05 20:00:55 +00001185clear all breaks at that line in that file.""", file=self.stdout)
Guido van Rossumb5699c71998-07-20 23:13:54 +00001186
Tim Peters2344fae2001-01-15 00:50:52 +00001187 def help_tbreak(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001188 print("""tbreak same arguments as break, but breakpoint is
1189removed when first hit.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001190
Tim Peters2344fae2001-01-15 00:50:52 +00001191 def help_enable(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001192 print("""enable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +00001193Enables the breakpoints given as a space separated list of
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001194bp numbers.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001195
Tim Peters2344fae2001-01-15 00:50:52 +00001196 def help_disable(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001197 print("""disable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +00001198Disables the breakpoints given as a space separated list of
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001199bp numbers.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001200
Tim Peters2344fae2001-01-15 00:50:52 +00001201 def help_ignore(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001202 print("""ignore bpnumber count
Tim Peters2344fae2001-01-15 00:50:52 +00001203Sets the ignore count for the given breakpoint number. A breakpoint
1204becomes active when the ignore count is zero. When non-zero, the
1205count is decremented each time the breakpoint is reached and the
1206breakpoint is not disabled and any associated condition evaluates
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001207to true.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001208
Tim Peters2344fae2001-01-15 00:50:52 +00001209 def help_condition(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001210 print("""condition bpnumber str_condition
Tim Peters2344fae2001-01-15 00:50:52 +00001211str_condition is a string specifying an expression which
1212must evaluate to true before the breakpoint is honored.
1213If str_condition is absent, any existing condition is removed;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001214i.e., the breakpoint is made unconditional.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001215
Tim Peters2344fae2001-01-15 00:50:52 +00001216 def help_step(self):
1217 self.help_s()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001218
Tim Peters2344fae2001-01-15 00:50:52 +00001219 def help_s(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001220 print("""s(tep)
Tim Peters2344fae2001-01-15 00:50:52 +00001221Execute the current line, stop at the first possible occasion
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001222(either in a function that is called or in the current function).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001223
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +00001224 def help_until(self):
1225 self.help_unt()
1226
1227 def help_unt(self):
1228 print("""unt(il)
1229Continue execution until the line with a number greater than the current
1230one is reached or until the current frame returns""")
1231
Tim Peters2344fae2001-01-15 00:50:52 +00001232 def help_next(self):
1233 self.help_n()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001234
Tim Peters2344fae2001-01-15 00:50:52 +00001235 def help_n(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001236 print("""n(ext)
Tim Peters2344fae2001-01-15 00:50:52 +00001237Continue execution until the next line in the current function
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001238is reached or it returns.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001239
Tim Peters2344fae2001-01-15 00:50:52 +00001240 def help_return(self):
1241 self.help_r()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001242
Tim Peters2344fae2001-01-15 00:50:52 +00001243 def help_r(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001244 print("""r(eturn)
1245Continue execution until the current function returns.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001246
Tim Peters2344fae2001-01-15 00:50:52 +00001247 def help_continue(self):
1248 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001249
Tim Peters2344fae2001-01-15 00:50:52 +00001250 def help_cont(self):
1251 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001252
Tim Peters2344fae2001-01-15 00:50:52 +00001253 def help_c(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001254 print("""c(ont(inue))
1255Continue execution, only stop when a breakpoint is encountered.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001256
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001257 def help_jump(self):
1258 self.help_j()
1259
1260 def help_j(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001261 print("""j(ump) lineno
1262Set the next line that will be executed.""", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001263
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001264 def help_debug(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001265 print("""debug code
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001266Enter a recursive debugger that steps through the code argument
1267(which is an arbitrary expression or statement to be executed
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001268in the current environment).""", file=self.stdout)
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001269
Tim Peters2344fae2001-01-15 00:50:52 +00001270 def help_list(self):
1271 self.help_l()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001272
Tim Peters2344fae2001-01-15 00:50:52 +00001273 def help_l(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001274 print("""l(ist) [first [,last]]
Tim Peters2344fae2001-01-15 00:50:52 +00001275List source code for the current file.
1276Without arguments, list 11 lines around the current line
1277or continue the previous listing.
1278With one argument, list 11 lines starting at that line.
1279With two arguments, list the given range;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001280if the second argument is less than the first, it is a count.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001281
Tim Peters2344fae2001-01-15 00:50:52 +00001282 def help_args(self):
1283 self.help_a()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001284
Tim Peters2344fae2001-01-15 00:50:52 +00001285 def help_a(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001286 print("""a(rgs)
1287Print the arguments of the current function.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001288
Tim Peters2344fae2001-01-15 00:50:52 +00001289 def help_p(self):
Georg Brandlc9879242007-09-04 07:07:56 +00001290 print("""p(rint) expression
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001291Print the value of the expression.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001292
Barry Warsaw210bd202002-11-05 22:40:20 +00001293 def help_pp(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001294 print("""pp expression
1295Pretty-print the value of the expression.""", file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001296
Tim Peters2344fae2001-01-15 00:50:52 +00001297 def help_exec(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001298 print("""(!) statement
Tim Peters2344fae2001-01-15 00:50:52 +00001299Execute the (one-line) statement in the context of
1300the current stack frame.
1301The exclamation point can be omitted unless the first word
1302of the statement resembles a debugger command.
1303To assign to a global variable you must always prefix the
1304command with a 'global' command, e.g.:
1305(Pdb) global list_options; list_options = ['-l']
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001306(Pdb)""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001307
Guido van Rossumd8faa362007-04-27 19:54:29 +00001308 def help_run(self):
1309 print("""run [args...]
1310Restart the debugged python program. If a string is supplied, it is
1311splitted with "shlex" and the result is used as the new sys.argv.
1312History, breakpoints, actions and debugger options are preserved.
1313"restart" is an alias for "run".""")
1314
1315 help_restart = help_run
1316
Tim Peters2344fae2001-01-15 00:50:52 +00001317 def help_quit(self):
1318 self.help_q()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001319
Tim Peters2344fae2001-01-15 00:50:52 +00001320 def help_q(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001321 print("""q(uit) or exit - Quit from the debugger.
1322The program being executed is aborted.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001323
Guido van Rossumd1c08f32002-04-15 00:48:24 +00001324 help_exit = help_q
1325
Tim Peters2344fae2001-01-15 00:50:52 +00001326 def help_whatis(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001327 print("""whatis arg
1328Prints the type of the argument.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001329
Tim Peters2344fae2001-01-15 00:50:52 +00001330 def help_EOF(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001331 print("""EOF
1332Handles the receipt of EOF as a command.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001333
Tim Peters2344fae2001-01-15 00:50:52 +00001334 def help_alias(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001335 print("""alias [name [command [parameter parameter ...] ]]
Tim Peters2344fae2001-01-15 00:50:52 +00001336Creates an alias called 'name' the executes 'command'. The command
1337must *not* be enclosed in quotes. Replaceable parameters are
1338indicated by %1, %2, and so on, while %* is replaced by all the
1339parameters. If no command is given, the current alias for name
1340is shown. If no name is given, all aliases are listed.
Guido van Rossum2424f851998-09-11 22:50:09 +00001341
Tim Peters2344fae2001-01-15 00:50:52 +00001342Aliases may be nested and can contain anything that can be
1343legally typed at the pdb prompt. Note! You *can* override
1344internal pdb commands with aliases! Those internal commands
1345are then hidden until the alias is removed. Aliasing is recursively
1346applied to the first word of the command line; all other words
1347in the line are left alone.
Guido van Rossum2424f851998-09-11 22:50:09 +00001348
Tim Peters2344fae2001-01-15 00:50:52 +00001349Some useful aliases (especially when placed in the .pdbrc file) are:
Guido van Rossum2424f851998-09-11 22:50:09 +00001350
Tim Peters2344fae2001-01-15 00:50:52 +00001351#Print instance variables (usage "pi classInst")
1352alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
Guido van Rossum2424f851998-09-11 22:50:09 +00001353
Tim Peters2344fae2001-01-15 00:50:52 +00001354#Print instance variables in self
1355alias ps pi self
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001356""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001357
Tim Peters2344fae2001-01-15 00:50:52 +00001358 def help_unalias(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001359 print("""unalias name
1360Deletes the specified alias.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001361
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001362 def help_commands(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001363 print("""commands [bpnumber]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001364(com) ...
1365(com) end
1366(Pdb)
1367
1368Specify a list of commands for breakpoint number bpnumber. The
1369commands themselves appear on the following lines. Type a line
1370containing just 'end' to terminate the commands.
1371
1372To remove all commands from a breakpoint, type commands and
1373follow it immediately with end; that is, give no commands.
1374
1375With no bpnumber argument, commands refers to the last
1376breakpoint set.
1377
1378You can use breakpoint commands to start your program up again.
1379Simply use the continue command, or step, or any other
1380command that resumes execution.
1381
1382Specifying any command resuming execution (currently continue,
1383step, next, return, jump, quit and their abbreviations) terminates
1384the command list (as if that command was immediately followed by end).
1385This is because any time you resume execution
1386(even with a simple next or step), you may encounter
1387another breakpoint--which could have its own command list, leading to
1388ambiguities about which list to execute.
1389
1390 If you use the 'silent' command in the command list, the
1391usual message about stopping at a breakpoint is not printed. This may
1392be desirable for breakpoints that are to print a specific message and
1393then continue. If none of the other commands print anything, you
1394see no sign that the breakpoint was reached.
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001395""", file=self.stdout)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001396
Tim Peters2344fae2001-01-15 00:50:52 +00001397 def help_pdb(self):
1398 help()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001399
Tim Peters2344fae2001-01-15 00:50:52 +00001400 def lookupmodule(self, filename):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001401 """Helper function for break/clear parsing -- may be overridden.
1402
1403 lookupmodule() translates (possibly incomplete) file or module name
1404 into an absolute file name.
1405 """
1406 if os.path.isabs(filename) and os.path.exists(filename):
Tim Peterse718f612004-10-12 21:51:32 +00001407 return filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001408 f = os.path.join(sys.path[0], filename)
1409 if os.path.exists(f) and self.canonic(f) == self.mainpyfile:
1410 return f
Tim Peters2344fae2001-01-15 00:50:52 +00001411 root, ext = os.path.splitext(filename)
1412 if ext == '':
1413 filename = filename + '.py'
1414 if os.path.isabs(filename):
1415 return filename
1416 for dirname in sys.path:
1417 while os.path.islink(dirname):
1418 dirname = os.readlink(dirname)
1419 fullname = os.path.join(dirname, filename)
1420 if os.path.exists(fullname):
1421 return fullname
1422 return None
Guido van Rossumb5699c71998-07-20 23:13:54 +00001423
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001424 def _runscript(self, filename):
Guido van Rossumd8faa362007-04-27 19:54:29 +00001425 # The script has to run in __main__ namespace (or imports from
1426 # __main__ will break).
1427 #
1428 # So we clear up the __main__ and set several special variables
1429 # (this gets rid of pdb's globals and cleans old variables on restarts).
1430 import __main__
1431 __main__.__dict__.clear()
1432 __main__.__dict__.update({"__name__" : "__main__",
1433 "__file__" : filename,
1434 "__builtins__": __builtins__,
1435 })
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001436
1437 # When bdb sets tracing, a number of call and line events happens
1438 # BEFORE debugger even reaches user's code (and the exact sequence of
1439 # events depends on python version). So we take special measures to
1440 # avoid stopping before we reach the main script (see user_line and
1441 # user_call for details).
1442 self._wait_for_mainpyfile = 1
1443 self.mainpyfile = self.canonic(filename)
1444 self._user_requested_quit = 0
Georg Brandld07ac642009-08-13 07:50:57 +00001445 with open(filename, "rb") as fp:
1446 statement = "exec(compile(%r, %r, 'exec'))" % \
1447 (fp.read(), self.mainpyfile)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001448 self.run(statement)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001449
Guido van Rossum35771131992-09-08 11:59:04 +00001450# Simplified interface
1451
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001452def run(statement, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001453 Pdb().run(statement, globals, locals)
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001454
1455def runeval(expression, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001456 return Pdb().runeval(expression, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001457
1458def runctx(statement, globals, locals):
Tim Peters2344fae2001-01-15 00:50:52 +00001459 # B/W compatibility
1460 run(statement, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001461
Raymond Hettinger2ef7e6c2004-10-24 00:32:24 +00001462def runcall(*args, **kwds):
1463 return Pdb().runcall(*args, **kwds)
Guido van Rossum4e160981992-09-02 20:43:20 +00001464
Guido van Rossumb6775db1994-08-01 11:34:53 +00001465def set_trace():
Johannes Gijsbers84a6c202004-11-07 11:35:30 +00001466 Pdb().set_trace(sys._getframe().f_back)
Guido van Rossum35771131992-09-08 11:59:04 +00001467
1468# Post-Mortem interface
1469
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001470def post_mortem(t=None):
1471 # handling the default
1472 if t is None:
1473 # sys.exc_info() returns (type, value, traceback) if an exception is
1474 # being handled, otherwise it returns None
1475 t = sys.exc_info()[2]
1476 if t is None:
1477 raise ValueError("A valid traceback must be passed if no "
1478 "exception is being handled")
1479
Tim Peters2344fae2001-01-15 00:50:52 +00001480 p = Pdb()
1481 p.reset()
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001482 p.interaction(None, t)
Guido van Rossum35771131992-09-08 11:59:04 +00001483
1484def pm():
Tim Peters2344fae2001-01-15 00:50:52 +00001485 post_mortem(sys.last_traceback)
Guido van Rossum35771131992-09-08 11:59:04 +00001486
1487
1488# Main program for testing
1489
Guido van Rossum23efba41992-01-27 16:58:47 +00001490TESTCMD = 'import x; x.main()'
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001491
Guido van Rossum921c8241992-01-10 14:54:42 +00001492def test():
Tim Peters2344fae2001-01-15 00:50:52 +00001493 run(TESTCMD)
Guido van Rossume61fa0a1993-10-22 13:56:35 +00001494
1495# print help
1496def help():
Georg Brandl02053ee2010-07-18 10:11:03 +00001497 import pydoc
1498 pydoc.pager(__doc__)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001499
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001500def main():
Christian Heimesf6cd9672008-03-26 13:45:42 +00001501 if not sys.argv[1:] or sys.argv[1] in ("--help", "-h"):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001502 print("usage: pdb.py scriptfile [arg] ...")
Tim Peters2344fae2001-01-15 00:50:52 +00001503 sys.exit(2)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001504
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001505 mainpyfile = sys.argv[1] # Get script filename
1506 if not os.path.exists(mainpyfile):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001507 print('Error:', mainpyfile, 'does not exist')
Tim Peters2344fae2001-01-15 00:50:52 +00001508 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001509
Tim Peters2344fae2001-01-15 00:50:52 +00001510 del sys.argv[0] # Hide "pdb.py" from argument list
Guido van Rossumec577d51996-09-10 17:39:34 +00001511
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001512 # Replace pdb's dir with script's dir in front of module search path.
1513 sys.path[0] = os.path.dirname(mainpyfile)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001514
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001515 # Note on saving/restoring sys.argv: it's a good idea when sys.argv was
1516 # modified by the script being debugged. It's a bad idea when it was
Georg Brandl3078df02009-05-05 09:11:31 +00001517 # changed by the user from the command line. There is a "restart" command
1518 # which allows explicit specification of command line arguments.
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001519 pdb = Pdb()
Georg Brandl1e30bd32010-07-30 07:21:26 +00001520 while True:
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001521 try:
1522 pdb._runscript(mainpyfile)
1523 if pdb._user_requested_quit:
1524 break
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001525 print("The program finished and will be restarted")
Guido van Rossumd8faa362007-04-27 19:54:29 +00001526 except Restart:
1527 print("Restarting", mainpyfile, "with arguments:")
1528 print("\t" + " ".join(sys.argv[1:]))
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001529 except SystemExit:
1530 # In most cases SystemExit does not warrant a post-mortem session.
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001531 print("The program exited via sys.exit(). Exit status: ", end=' ')
1532 print(sys.exc_info()[1])
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001533 except:
1534 traceback.print_exc()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001535 print("Uncaught exception. Entering post mortem debugging")
1536 print("Running 'cont' or 'step' will restart the program")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001537 t = sys.exc_info()[2]
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001538 pdb.interaction(None, t)
Georg Brandl3078df02009-05-05 09:11:31 +00001539 print("Post mortem debugger finished. The " + mainpyfile +
1540 " will be restarted")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001541
1542
1543# When invoked as main program, invoke the debugger on a script
Guido van Rossumd8faa362007-04-27 19:54:29 +00001544if __name__ == '__main__':
1545 import pdb
1546 pdb.main()