blob: d6a9a925da017bd74711c045144ff72d4b55e6d0 [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
Georg Brandl02053ee2010-07-18 10:11:03 +000065"""
Georg Brandl0d089622010-07-30 16:00:46 +000066# NOTE: the actual command documentation is collected from docstrings of the
67# commands and is appended to __doc__ after the class has been defined.
Guido van Rossum921c8241992-01-10 14:54:42 +000068
Guido van Rossum921c8241992-01-10 14:54:42 +000069import sys
Guido van Rossum23efba41992-01-27 16:58:47 +000070import cmd
71import bdb
Georg Brandl0a9c3e92010-07-30 18:46:38 +000072import dis
Guido van Rossumb5699c71998-07-20 23:13:54 +000073import os
Barry Warsaw2bee8fe1999-09-09 16:32:41 +000074import re
Georg Brandl1acb7462010-12-04 11:20:26 +000075import code
Barry Warsaw210bd202002-11-05 22:40:20 +000076import pprint
Georg Brandle59ca2a2010-07-30 17:04:28 +000077import inspect
Georg Brandl1acb7462010-12-04 11:20:26 +000078import traceback
79import linecache
Guido van Rossumd8faa362007-04-27 19:54:29 +000080
81
82class Restart(Exception):
83 """Causes a debugger to be restarted for the debugged python program."""
84 pass
85
Skip Montanaro352674d2001-02-07 23:14:30 +000086__all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace",
87 "post_mortem", "help"]
88
Barry Warsaw2bee8fe1999-09-09 16:32:41 +000089def find_function(funcname, filename):
Thomas Wouters89f507f2006-12-13 04:49:30 +000090 cre = re.compile(r'def\s+%s\s*[(]' % re.escape(funcname))
Tim Peters2344fae2001-01-15 00:50:52 +000091 try:
92 fp = open(filename)
93 except IOError:
94 return None
95 # consumer of this info expects the first line to be 1
96 lineno = 1
97 answer = None
Georg Brandlac9a2bb2010-11-29 20:19:15 +000098 while True:
Tim Peters2344fae2001-01-15 00:50:52 +000099 line = fp.readline()
100 if line == '':
101 break
102 if cre.match(line):
103 answer = funcname, filename, lineno
104 break
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000105 lineno += 1
Tim Peters2344fae2001-01-15 00:50:52 +0000106 fp.close()
107 return answer
Guido van Rossum921c8241992-01-10 14:54:42 +0000108
Georg Brandl5ed2b5a2010-07-30 18:08:12 +0000109def getsourcelines(obj):
110 lines, lineno = inspect.findsource(obj)
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000111 if inspect.isframe(obj) and obj.f_globals is obj.f_locals:
Georg Brandl5ed2b5a2010-07-30 18:08:12 +0000112 # must be a module frame: do not try to cut a block out of it
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000113 return lines, 1
Georg Brandl5ed2b5a2010-07-30 18:08:12 +0000114 elif inspect.ismodule(obj):
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000115 return lines, 1
Georg Brandl5ed2b5a2010-07-30 18:08:12 +0000116 return inspect.getblock(lines[lineno:]), lineno+1
Guido van Rossum921c8241992-01-10 14:54:42 +0000117
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000118def lasti2lineno(code, lasti):
119 linestarts = list(dis.findlinestarts(code))
120 linestarts.reverse()
121 for i, lineno in linestarts:
122 if lasti >= i:
123 return lineno
124 return 0
125
126
Guido van Rossuma558e371994-11-10 22:27:35 +0000127# Interaction prompt line will separate file and call info from code
128# text using value of line_prefix string. A newline and arrow may
129# be to your liking. You can set it once pdb is imported using the
130# command "pdb.line_prefix = '\n% '".
Tim Peters2344fae2001-01-15 00:50:52 +0000131# line_prefix = ': ' # Use this to get the old situation back
132line_prefix = '\n-> ' # Probably a better default
Guido van Rossuma558e371994-11-10 22:27:35 +0000133
Guido van Rossum23efba41992-01-27 16:58:47 +0000134class Pdb(bdb.Bdb, cmd.Cmd):
Guido van Rossum2424f851998-09-11 22:50:09 +0000135
Georg Brandl243ad662009-05-05 09:00:19 +0000136 def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None):
137 bdb.Bdb.__init__(self, skip=skip)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000138 cmd.Cmd.__init__(self, completekey, stdin, stdout)
139 if stdout:
140 self.use_rawinput = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000141 self.prompt = '(Pdb) '
142 self.aliases = {}
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000143 self.mainpyfile = ''
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000144 self._wait_for_mainpyfile = False
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000145 self.tb_lineno = {}
Tim Peters2344fae2001-01-15 00:50:52 +0000146 # Try to load readline if it exists
147 try:
148 import readline
149 except ImportError:
150 pass
Guido van Rossum2424f851998-09-11 22:50:09 +0000151
Tim Peters2344fae2001-01-15 00:50:52 +0000152 # Read $HOME/.pdbrc and ./.pdbrc
153 self.rcLines = []
Raymond Hettinger54f02222002-06-01 14:18:47 +0000154 if 'HOME' in os.environ:
Tim Peters2344fae2001-01-15 00:50:52 +0000155 envHome = os.environ['HOME']
156 try:
Florent Xicluna7dde7922010-09-03 19:52:03 +0000157 with open(os.path.join(envHome, ".pdbrc")) as rcFile:
158 self.rcLines.extend(rcFile)
Tim Peters2344fae2001-01-15 00:50:52 +0000159 except IOError:
160 pass
Tim Peters2344fae2001-01-15 00:50:52 +0000161 try:
Florent Xicluna7dde7922010-09-03 19:52:03 +0000162 with open(".pdbrc") as rcFile:
163 self.rcLines.extend(rcFile)
Tim Peters2344fae2001-01-15 00:50:52 +0000164 except IOError:
165 pass
Guido van Rossum23efba41992-01-27 16:58:47 +0000166
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000167 self.commands = {} # associates a command list to breakpoint numbers
Benjamin Petersond23f8222009-04-05 19:13:16 +0000168 self.commands_doprompt = {} # for each bp num, tells if the prompt
169 # must be disp. after execing the cmd list
170 self.commands_silent = {} # for each bp num, tells if the stack trace
171 # must be disp. after execing the cmd list
172 self.commands_defining = False # True while in the process of defining
173 # a command list
174 self.commands_bnum = None # The breakpoint number for which we are
175 # defining a list
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000176
Tim Peters2344fae2001-01-15 00:50:52 +0000177 def reset(self):
178 bdb.Bdb.reset(self)
179 self.forget()
Guido van Rossum23efba41992-01-27 16:58:47 +0000180
Tim Peters2344fae2001-01-15 00:50:52 +0000181 def forget(self):
182 self.lineno = None
183 self.stack = []
184 self.curindex = 0
185 self.curframe = None
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000186 self.tb_lineno.clear()
Guido van Rossum2424f851998-09-11 22:50:09 +0000187
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000188 def setup(self, f, tb):
Tim Peters2344fae2001-01-15 00:50:52 +0000189 self.forget()
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000190 self.stack, self.curindex = self.get_stack(f, tb)
191 while tb:
192 # when setting up post-mortem debugging with a traceback, save all
193 # the original line numbers to be displayed along the current line
194 # numbers (which can be different, e.g. due to finally clauses)
195 lineno = lasti2lineno(tb.tb_frame.f_code, tb.tb_lasti)
196 self.tb_lineno[tb.tb_frame] = lineno
197 tb = tb.tb_next
Tim Peters2344fae2001-01-15 00:50:52 +0000198 self.curframe = self.stack[self.curindex][0]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000199 # The f_locals dictionary is updated from the actual frame
200 # locals whenever the .f_locals accessor is called, so we
201 # cache it here to ensure that modifications are not overwritten.
202 self.curframe_locals = self.curframe.f_locals
Georg Brandle0230912010-07-30 08:29:39 +0000203 return self.execRcLines()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000204
Tim Peters2344fae2001-01-15 00:50:52 +0000205 # Can be executed earlier than 'setup' if desired
206 def execRcLines(self):
Georg Brandle0230912010-07-30 08:29:39 +0000207 if not self.rcLines:
208 return
209 # local copy because of recursion
210 rcLines = self.rcLines
211 rcLines.reverse()
212 # execute every line only once
213 self.rcLines = []
214 while rcLines:
215 line = rcLines.pop().strip()
216 if line and line[0] != '#':
217 if self.onecmd(line):
218 # if onecmd returns True, the command wants to exit
219 # from the interaction, save leftover rc lines
220 # to execute before next interaction
221 self.rcLines += reversed(rcLines)
222 return True
Guido van Rossum2424f851998-09-11 22:50:09 +0000223
Tim Peters280488b2002-08-23 18:19:30 +0000224 # Override Bdb methods
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000225
226 def user_call(self, frame, argument_list):
227 """This method is called when there is the remote possibility
228 that we ever need to stop in this function."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000229 if self._wait_for_mainpyfile:
230 return
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000231 if self.stop_here(frame):
Georg Brandl0d089622010-07-30 16:00:46 +0000232 self.message('--Call--')
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000233 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000234
Tim Peters2344fae2001-01-15 00:50:52 +0000235 def user_line(self, frame):
236 """This function is called when we stop or break at this line."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000237 if self._wait_for_mainpyfile:
238 if (self.mainpyfile != self.canonic(frame.f_code.co_filename)
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000239 or frame.f_lineno <= 0):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000240 return
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000241 self._wait_for_mainpyfile = False
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000242 if self.bp_commands(frame):
243 self.interaction(frame, None)
244
Georg Brandle0230912010-07-30 08:29:39 +0000245 def bp_commands(self, frame):
Georg Brandl3078df02009-05-05 09:11:31 +0000246 """Call every command that was set for the current active breakpoint
247 (if there is one).
248
249 Returns True if the normal interaction function must be called,
250 False otherwise."""
251 # self.currentbp is set in bdb in Bdb.break_here if a breakpoint was hit
252 if getattr(self, "currentbp", False) and \
253 self.currentbp in self.commands:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000254 currentbp = self.currentbp
255 self.currentbp = 0
256 lastcmd_back = self.lastcmd
257 self.setup(frame, None)
258 for line in self.commands[currentbp]:
259 self.onecmd(line)
260 self.lastcmd = lastcmd_back
261 if not self.commands_silent[currentbp]:
262 self.print_stack_entry(self.stack[self.curindex])
263 if self.commands_doprompt[currentbp]:
264 self.cmdloop()
265 self.forget()
266 return
267 return 1
Guido van Rossum9e1ee971997-07-11 13:43:53 +0000268
Tim Peters2344fae2001-01-15 00:50:52 +0000269 def user_return(self, frame, return_value):
270 """This function is called when a return trap is set here."""
Georg Brandl34cc0f52010-07-30 09:43:00 +0000271 if self._wait_for_mainpyfile:
272 return
Tim Peters2344fae2001-01-15 00:50:52 +0000273 frame.f_locals['__return__'] = return_value
Georg Brandl0d089622010-07-30 16:00:46 +0000274 self.message('--Return--')
Tim Peters2344fae2001-01-15 00:50:52 +0000275 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000276
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000277 def user_exception(self, frame, exc_info):
Tim Peters2344fae2001-01-15 00:50:52 +0000278 """This function is called if an exception occurs,
279 but only if we are to stop at or just below this level."""
Georg Brandl34cc0f52010-07-30 09:43:00 +0000280 if self._wait_for_mainpyfile:
281 return
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000282 exc_type, exc_value, exc_traceback = exc_info
Tim Peters2344fae2001-01-15 00:50:52 +0000283 frame.f_locals['__exception__'] = exc_type, exc_value
Georg Brandl0d089622010-07-30 16:00:46 +0000284 self.message(traceback.format_exception_only(exc_type,
285 exc_value)[-1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000286 self.interaction(frame, exc_traceback)
Guido van Rossum2424f851998-09-11 22:50:09 +0000287
Tim Peters2344fae2001-01-15 00:50:52 +0000288 # General interaction function
289
290 def interaction(self, frame, traceback):
Georg Brandle0230912010-07-30 08:29:39 +0000291 if self.setup(frame, traceback):
292 # no interaction desired at this time (happens if .pdbrc contains
293 # a command like "continue")
294 self.forget()
295 return
Tim Peters2344fae2001-01-15 00:50:52 +0000296 self.print_stack_entry(self.stack[self.curindex])
297 self.cmdloop()
298 self.forget()
299
Benjamin Petersond23f8222009-04-05 19:13:16 +0000300 def displayhook(self, obj):
301 """Custom displayhook for the exec in default(), which prevents
302 assignment of the _ variable in the builtins.
303 """
Georg Brandl9fa2e022009-09-16 16:40:45 +0000304 # reproduce the behavior of the standard displayhook, not printing None
305 if obj is not None:
Georg Brandl0d089622010-07-30 16:00:46 +0000306 self.message(repr(obj))
Benjamin Petersond23f8222009-04-05 19:13:16 +0000307
Tim Peters2344fae2001-01-15 00:50:52 +0000308 def default(self, line):
309 if line[:1] == '!': line = line[1:]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000310 locals = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000311 globals = self.curframe.f_globals
312 try:
313 code = compile(line + '\n', '<stdin>', 'single')
Christian Heimes679db4a2008-01-18 09:56:22 +0000314 save_stdout = sys.stdout
315 save_stdin = sys.stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000316 save_displayhook = sys.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000317 try:
318 sys.stdin = self.stdin
319 sys.stdout = self.stdout
Benjamin Petersond23f8222009-04-05 19:13:16 +0000320 sys.displayhook = self.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000321 exec(code, globals, locals)
322 finally:
323 sys.stdout = save_stdout
324 sys.stdin = save_stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000325 sys.displayhook = save_displayhook
Tim Peters2344fae2001-01-15 00:50:52 +0000326 except:
Georg Brandl0d089622010-07-30 16:00:46 +0000327 exc_info = sys.exc_info()[:2]
328 self.error(traceback.format_exception_only(*exc_info)[-1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000329
330 def precmd(self, line):
331 """Handle alias expansion and ';;' separator."""
Guido van Rossum08454592002-07-12 13:10:53 +0000332 if not line.strip():
Tim Peters2344fae2001-01-15 00:50:52 +0000333 return line
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000334 args = line.split()
Raymond Hettinger54f02222002-06-01 14:18:47 +0000335 while args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000336 line = self.aliases[args[0]]
337 ii = 1
338 for tmpArg in args[1:]:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000339 line = line.replace("%" + str(ii),
Tim Peters2344fae2001-01-15 00:50:52 +0000340 tmpArg)
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000341 ii += 1
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000342 line = line.replace("%*", ' '.join(args[1:]))
343 args = line.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000344 # split into ';;' separated commands
345 # unless it's an alias command
346 if args[0] != 'alias':
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000347 marker = line.find(';;')
Tim Peters2344fae2001-01-15 00:50:52 +0000348 if marker >= 0:
349 # queue up everything after marker
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000350 next = line[marker+2:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000351 self.cmdqueue.append(next)
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000352 line = line[:marker].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000353 return line
354
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000355 def onecmd(self, line):
356 """Interpret the argument as though it had been typed in response
357 to the prompt.
358
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000359 Checks whether this line is typed at the normal prompt or in
360 a breakpoint command list definition.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000361 """
362 if not self.commands_defining:
363 return cmd.Cmd.onecmd(self, line)
364 else:
365 return self.handle_command_def(line)
366
Georg Brandlb90ffd82010-07-30 22:20:16 +0000367 def handle_command_def(self, line):
Georg Brandl44f8bf92010-07-30 08:54:49 +0000368 """Handles one command line during command list definition."""
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000369 cmd, arg, line = self.parseline(line)
Georg Brandl44f8bf92010-07-30 08:54:49 +0000370 if not cmd:
371 return
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000372 if cmd == 'silent':
373 self.commands_silent[self.commands_bnum] = True
374 return # continue to handle other cmd def in the cmd list
375 elif cmd == 'end':
376 self.cmdqueue = []
377 return 1 # end of cmd list
378 cmdlist = self.commands[self.commands_bnum]
Georg Brandl44f8bf92010-07-30 08:54:49 +0000379 if arg:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000380 cmdlist.append(cmd+' '+arg)
381 else:
382 cmdlist.append(cmd)
383 # Determine if we must stop
384 try:
385 func = getattr(self, 'do_' + cmd)
386 except AttributeError:
387 func = self.default
Georg Brandl3078df02009-05-05 09:11:31 +0000388 # one of the resuming commands
389 if func.__name__ in self.commands_resuming:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000390 self.commands_doprompt[self.commands_bnum] = False
391 self.cmdqueue = []
392 return 1
393 return
394
Georg Brandl0d089622010-07-30 16:00:46 +0000395 # interface abstraction functions
396
397 def message(self, msg):
398 print(msg, file=self.stdout)
399
400 def error(self, msg):
401 print('***', msg, file=self.stdout)
402
Tim Peters2344fae2001-01-15 00:50:52 +0000403 # Command definitions, called by cmdloop()
404 # The argument is the remaining string on the command line
405 # Return true to exit from the command loop
406
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000407 def do_commands(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000408 """commands [bpnumber]
409 (com) ...
410 (com) end
411 (Pdb)
Georg Brandl3078df02009-05-05 09:11:31 +0000412
Georg Brandl0d089622010-07-30 16:00:46 +0000413 Specify a list of commands for breakpoint number bpnumber.
414 The commands themselves are entered on the following lines.
415 Type a line containing just 'end' to terminate the commands.
416 The commands are executed when the breakpoint is hit.
417
418 To remove all commands from a breakpoint, type commands and
419 follow it immediately with end; that is, give no commands.
420
421 With no bpnumber argument, commands refers to the last
422 breakpoint set.
423
424 You can use breakpoint commands to start your program up
425 again. Simply use the continue command, or step, or any other
426 command that resumes execution.
427
428 Specifying any command resuming execution (currently continue,
429 step, next, return, jump, quit and their abbreviations)
430 terminates the command list (as if that command was
431 immediately followed by end). This is because any time you
432 resume execution (even with a simple next or step), you may
433 encounter another breakpoint -- which could have its own
434 command list, leading to ambiguities about which list to
435 execute.
436
437 If you use the 'silent' command in the command list, the usual
438 message about stopping at a breakpoint is not printed. This
439 may be desirable for breakpoints that are to print a specific
440 message and then continue. If none of the other commands
441 print anything, you will see no sign that the breakpoint was
442 reached.
443 """
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000444 if not arg:
Georg Brandl7410dd12010-07-30 12:01:20 +0000445 bnum = len(bdb.Breakpoint.bpbynumber) - 1
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000446 else:
447 try:
448 bnum = int(arg)
449 except:
Georg Brandl0d089622010-07-30 16:00:46 +0000450 self.error("Usage: commands [bnum]\n ...\n end")
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000451 return
452 self.commands_bnum = bnum
Georg Brandlb90ffd82010-07-30 22:20:16 +0000453 # Save old definitions for the case of a keyboard interrupt.
454 if bnum in self.commands:
455 old_command_defs = (self.commands[bnum],
456 self.commands_doprompt[bnum],
457 self.commands_silent[bnum])
458 else:
459 old_command_defs = None
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000460 self.commands[bnum] = []
461 self.commands_doprompt[bnum] = True
462 self.commands_silent[bnum] = False
Georg Brandlb90ffd82010-07-30 22:20:16 +0000463
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000464 prompt_back = self.prompt
465 self.prompt = '(com) '
466 self.commands_defining = True
Georg Brandl44f8bf92010-07-30 08:54:49 +0000467 try:
468 self.cmdloop()
Georg Brandlb90ffd82010-07-30 22:20:16 +0000469 except KeyboardInterrupt:
470 # Restore old definitions.
471 if old_command_defs:
472 self.commands[bnum] = old_command_defs[0]
473 self.commands_doprompt[bnum] = old_command_defs[1]
474 self.commands_silent[bnum] = old_command_defs[2]
475 else:
476 del self.commands[bnum]
477 del self.commands_doprompt[bnum]
478 del self.commands_silent[bnum]
479 self.error('command definition aborted, old commands restored')
Georg Brandl44f8bf92010-07-30 08:54:49 +0000480 finally:
481 self.commands_defining = False
482 self.prompt = prompt_back
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000483
Tim Peters2344fae2001-01-15 00:50:52 +0000484 def do_break(self, arg, temporary = 0):
Georg Brandl0d089622010-07-30 16:00:46 +0000485 """b(reak) [ ([filename:]lineno | function) [, condition] ]
486 Without argument, list all breaks.
487
488 With a line number argument, set a break at this line in the
489 current file. With a function name, set a break at the first
490 executable line of that function. If a second argument is
491 present, it is a string specifying an expression which must
492 evaluate to true before the breakpoint is honored.
493
494 The line number may be prefixed with a filename and a colon,
495 to specify a breakpoint in another file (probably one that
496 hasn't been loaded yet). The file is searched for on
497 sys.path; the .py suffix may be omitted.
498 """
Tim Peters2344fae2001-01-15 00:50:52 +0000499 if not arg:
500 if self.breaks: # There's at least one
Georg Brandl0d089622010-07-30 16:00:46 +0000501 self.message("Num Type Disp Enb Where")
Tim Peters2344fae2001-01-15 00:50:52 +0000502 for bp in bdb.Breakpoint.bpbynumber:
503 if bp:
Georg Brandl0d089622010-07-30 16:00:46 +0000504 self.message(bp.bpformat())
Tim Peters2344fae2001-01-15 00:50:52 +0000505 return
506 # parse arguments; comma has lowest precedence
507 # and cannot occur in filename
508 filename = None
509 lineno = None
510 cond = None
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000511 comma = arg.find(',')
Tim Peters2344fae2001-01-15 00:50:52 +0000512 if comma > 0:
513 # parse stuff after comma: "condition"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000514 cond = arg[comma+1:].lstrip()
515 arg = arg[:comma].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000516 # parse stuff before comma: [filename:]lineno | function
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000517 colon = arg.rfind(':')
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000518 funcname = None
Tim Peters2344fae2001-01-15 00:50:52 +0000519 if colon >= 0:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000520 filename = arg[:colon].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000521 f = self.lookupmodule(filename)
522 if not f:
Georg Brandl0d089622010-07-30 16:00:46 +0000523 self.error('%r not found from sys.path' % filename)
Tim Peters2344fae2001-01-15 00:50:52 +0000524 return
525 else:
526 filename = f
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000527 arg = arg[colon+1:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000528 try:
529 lineno = int(arg)
Georg Brandlf93390a2010-10-14 07:17:44 +0000530 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000531 self.error('Bad lineno: %s' % arg)
Tim Peters2344fae2001-01-15 00:50:52 +0000532 return
533 else:
534 # no colon; can be lineno or function
535 try:
536 lineno = int(arg)
537 except ValueError:
538 try:
539 func = eval(arg,
540 self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +0000541 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000542 except:
543 func = arg
544 try:
Christian Heimesff737952007-11-27 10:40:20 +0000545 if hasattr(func, '__func__'):
546 func = func.__func__
Neal Norwitz221085d2007-02-25 20:55:47 +0000547 code = func.__code__
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000548 #use co_name to identify the bkpt (function names
549 #could be aliased, but co_name is invariant)
550 funcname = code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000551 lineno = code.co_firstlineno
552 filename = code.co_filename
553 except:
554 # last thing to try
555 (ok, filename, ln) = self.lineinfo(arg)
556 if not ok:
Georg Brandl0d089622010-07-30 16:00:46 +0000557 self.error('The specified object %r is not a function '
558 'or was not found along sys.path.' % arg)
Tim Peters2344fae2001-01-15 00:50:52 +0000559 return
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000560 funcname = ok # ok contains a function name
Tim Peters2344fae2001-01-15 00:50:52 +0000561 lineno = int(ln)
562 if not filename:
563 filename = self.defaultFile()
564 # Check for reasonable breakpoint
565 line = self.checkline(filename, lineno)
566 if line:
567 # now set the break point
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000568 err = self.set_break(filename, line, temporary, cond, funcname)
Georg Brandl0d089622010-07-30 16:00:46 +0000569 if err:
570 self.error(err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000571 else:
572 bp = self.get_breaks(filename, line)[-1]
Georg Brandl0d089622010-07-30 16:00:46 +0000573 self.message("Breakpoint %d at %s:%d" %
574 (bp.number, bp.file, bp.line))
Tim Peters2344fae2001-01-15 00:50:52 +0000575
576 # To be overridden in derived debuggers
577 def defaultFile(self):
578 """Produce a reasonable default."""
579 filename = self.curframe.f_code.co_filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000580 if filename == '<string>' and self.mainpyfile:
581 filename = self.mainpyfile
Tim Peters2344fae2001-01-15 00:50:52 +0000582 return filename
583
584 do_b = do_break
585
586 def do_tbreak(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000587 """tbreak [ ([filename:]lineno | function) [, condition] ]
588 Same arguments as break, but sets a temporary breakpoint: it
589 is automatically deleted when first hit.
590 """
Tim Peters2344fae2001-01-15 00:50:52 +0000591 self.do_break(arg, 1)
592
593 def lineinfo(self, identifier):
594 failed = (None, None, None)
595 # Input is identifier, may be in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000596 idstring = identifier.split("'")
Tim Peters2344fae2001-01-15 00:50:52 +0000597 if len(idstring) == 1:
598 # not in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000599 id = idstring[0].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000600 elif len(idstring) == 3:
601 # quoted
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000602 id = idstring[1].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000603 else:
604 return failed
605 if id == '': return failed
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000606 parts = id.split('.')
Tim Peters2344fae2001-01-15 00:50:52 +0000607 # Protection for derived debuggers
608 if parts[0] == 'self':
609 del parts[0]
610 if len(parts) == 0:
611 return failed
612 # Best first guess at file to look at
613 fname = self.defaultFile()
614 if len(parts) == 1:
615 item = parts[0]
616 else:
617 # More than one part.
618 # First is module, second is method/class
619 f = self.lookupmodule(parts[0])
620 if f:
621 fname = f
622 item = parts[1]
623 answer = find_function(item, fname)
624 return answer or failed
625
626 def checkline(self, filename, lineno):
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000627 """Check whether specified line seems to be executable.
Tim Peters2344fae2001-01-15 00:50:52 +0000628
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000629 Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank
630 line or EOF). Warning: testing is not comprehensive.
631 """
Georg Brandl1e30bd32010-07-30 07:21:26 +0000632 # this method should be callable before starting debugging, so default
633 # to "no globals" if there is no current frame
634 globs = self.curframe.f_globals if hasattr(self, 'curframe') else None
635 line = linecache.getline(filename, lineno, globs)
Tim Peters2344fae2001-01-15 00:50:52 +0000636 if not line:
Georg Brandl0d089622010-07-30 16:00:46 +0000637 self.message('End of file')
Tim Peters2344fae2001-01-15 00:50:52 +0000638 return 0
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000639 line = line.strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000640 # Don't allow setting breakpoint at a blank line
Guido van Rossum08454592002-07-12 13:10:53 +0000641 if (not line or (line[0] == '#') or
642 (line[:3] == '"""') or line[:3] == "'''"):
Georg Brandl0d089622010-07-30 16:00:46 +0000643 self.error('Blank or comment')
Tim Peters2344fae2001-01-15 00:50:52 +0000644 return 0
Tim Peters2344fae2001-01-15 00:50:52 +0000645 return lineno
646
647 def do_enable(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000648 """enable bpnumber [bpnumber ...]
649 Enables the breakpoints given as a space separated list of
650 breakpoint numbers.
651 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000652 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000653 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000654 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000655 bp = self.get_bpbynumber(i)
656 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000657 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000658 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000659 bp.enable()
Georg Brandl0d089622010-07-30 16:00:46 +0000660 self.message('Enabled %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000661
662 def do_disable(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000663 """disable bpnumber [bpnumber ...]
664 Disables the breakpoints given as a space separated list of
665 breakpoint numbers. Disabling a breakpoint means it cannot
666 cause the program to stop execution, but unlike clearing a
667 breakpoint, it remains in the list of breakpoints and can be
668 (re-)enabled.
669 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000670 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000671 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000672 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000673 bp = self.get_bpbynumber(i)
674 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000675 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000676 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000677 bp.disable()
Georg Brandl0d089622010-07-30 16:00:46 +0000678 self.message('Disabled %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000679
680 def do_condition(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000681 """condition bpnumber [condition]
682 Set a new condition for the breakpoint, an expression which
683 must evaluate to true before the breakpoint is honored. If
684 condition is absent, any existing condition is removed; i.e.,
685 the breakpoint is made unconditional.
686 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000687 args = arg.split(' ', 1)
Thomas Woutersb2137042007-02-01 18:02:27 +0000688 try:
Tim Peters2344fae2001-01-15 00:50:52 +0000689 cond = args[1]
Georg Brandl7410dd12010-07-30 12:01:20 +0000690 except IndexError:
Tim Peters2344fae2001-01-15 00:50:52 +0000691 cond = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000692 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000693 bp = self.get_bpbynumber(args[0].strip())
694 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000695 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000696 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000697 bp.cond = cond
698 if not cond:
Georg Brandl0d089622010-07-30 16:00:46 +0000699 self.message('Breakpoint %d is now unconditional.' % bp.number)
Georg Brandl7410dd12010-07-30 12:01:20 +0000700 else:
Georg Brandl0d089622010-07-30 16:00:46 +0000701 self.message('New condition set for breakpoint %d.' % bp.number)
Tim Peters2344fae2001-01-15 00:50:52 +0000702
Georg Brandl7410dd12010-07-30 12:01:20 +0000703 def do_ignore(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000704 """ignore bpnumber [count]
705 Set the ignore count for the given breakpoint number. If
706 count is omitted, the ignore count is set to 0. A breakpoint
707 becomes active when the ignore count is zero. When non-zero,
708 the count is decremented each time the breakpoint is reached
709 and the breakpoint is not disabled and any associated
710 condition evaluates to true.
711 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000712 args = arg.split()
Thomas Woutersb2137042007-02-01 18:02:27 +0000713 try:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000714 count = int(args[1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000715 except:
716 count = 0
Guido van Rossumd8faa362007-04-27 19:54:29 +0000717 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000718 bp = self.get_bpbynumber(args[0].strip())
719 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000720 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000721 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000722 bp.ignore = count
Guido van Rossum08454592002-07-12 13:10:53 +0000723 if count > 0:
Guido van Rossum08454592002-07-12 13:10:53 +0000724 if count > 1:
Georg Brandl0d089622010-07-30 16:00:46 +0000725 countstr = '%d crossings' % count
Tim Peters2344fae2001-01-15 00:50:52 +0000726 else:
Georg Brandl0d089622010-07-30 16:00:46 +0000727 countstr = '1 crossing'
728 self.message('Will ignore next %s of breakpoint %d.' %
729 (countstr, bp.number))
Tim Peters2344fae2001-01-15 00:50:52 +0000730 else:
Georg Brandl0d089622010-07-30 16:00:46 +0000731 self.message('Will stop next time breakpoint %d is reached.'
732 % bp.number)
Tim Peters2344fae2001-01-15 00:50:52 +0000733
734 def do_clear(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000735 """cl(ear) filename:lineno\ncl(ear) [bpnumber [bpnumber...]]
736 With a space separated list of breakpoint numbers, clear
737 those breakpoints. Without argument, clear all breaks (but
738 first ask confirmation). With a filename:lineno argument,
739 clear all breaks at that line in that file.
740 """
Tim Peters2344fae2001-01-15 00:50:52 +0000741 if not arg:
742 try:
Guido van Rossumc5b6ab02007-05-27 09:19:52 +0000743 reply = input('Clear all breaks? ')
Tim Peters2344fae2001-01-15 00:50:52 +0000744 except EOFError:
745 reply = 'no'
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000746 reply = reply.strip().lower()
Tim Peters2344fae2001-01-15 00:50:52 +0000747 if reply in ('y', 'yes'):
Georg Brandl7410dd12010-07-30 12:01:20 +0000748 bplist = [bp for bp in bdb.Breakpoint.bpbynumber if bp]
Tim Peters2344fae2001-01-15 00:50:52 +0000749 self.clear_all_breaks()
Georg Brandl7410dd12010-07-30 12:01:20 +0000750 for bp in bplist:
Georg Brandl0d089622010-07-30 16:00:46 +0000751 self.message('Deleted %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000752 return
753 if ':' in arg:
754 # Make sure it works for "clear C:\foo\bar.py:12"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000755 i = arg.rfind(':')
Tim Peters2344fae2001-01-15 00:50:52 +0000756 filename = arg[:i]
757 arg = arg[i+1:]
758 try:
759 lineno = int(arg)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000760 except ValueError:
Tim Peters2344fae2001-01-15 00:50:52 +0000761 err = "Invalid line number (%s)" % arg
762 else:
Georg Brandl7410dd12010-07-30 12:01:20 +0000763 bplist = self.get_breaks(filename, lineno)
Tim Peters2344fae2001-01-15 00:50:52 +0000764 err = self.clear_break(filename, lineno)
Georg Brandl7410dd12010-07-30 12:01:20 +0000765 if err:
Georg Brandl0d089622010-07-30 16:00:46 +0000766 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000767 else:
768 for bp in bplist:
Georg Brandl0d089622010-07-30 16:00:46 +0000769 self.message('Deleted %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000770 return
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000771 numberlist = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000772 for i in numberlist:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000773 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000774 bp = self.get_bpbynumber(i)
775 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000776 self.error(err)
Tim Peters2344fae2001-01-15 00:50:52 +0000777 else:
Senthil Kumaran6f107042010-11-29 11:54:17 +0000778 self.clear_bpbynumber(i)
Georg Brandl0d089622010-07-30 16:00:46 +0000779 self.message('Deleted %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000780 do_cl = do_clear # 'c' is already an abbreviation for 'continue'
781
782 def do_where(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000783 """w(here)
784 Print a stack trace, with the most recent frame at the bottom.
785 An arrow indicates the "current frame", which determines the
786 context of most commands. 'bt' is an alias for this command.
787 """
Tim Peters2344fae2001-01-15 00:50:52 +0000788 self.print_stack_trace()
789 do_w = do_where
Guido van Rossum6bd68352001-01-20 17:57:37 +0000790 do_bt = do_where
Tim Peters2344fae2001-01-15 00:50:52 +0000791
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000792 def _select_frame(self, number):
793 assert 0 <= number < len(self.stack)
794 self.curindex = number
795 self.curframe = self.stack[self.curindex][0]
796 self.curframe_locals = self.curframe.f_locals
797 self.print_stack_entry(self.stack[self.curindex])
798 self.lineno = None
799
Tim Peters2344fae2001-01-15 00:50:52 +0000800 def do_up(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000801 """u(p) [count]
802 Move the current frame count (default one) levels up in the
803 stack trace (to an older frame).
804 """
Tim Peters2344fae2001-01-15 00:50:52 +0000805 if self.curindex == 0:
Georg Brandl0d089622010-07-30 16:00:46 +0000806 self.error('Oldest frame')
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000807 return
808 try:
809 count = int(arg or 1)
810 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000811 self.error('Invalid frame count (%s)' % arg)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000812 return
813 if count < 0:
814 newframe = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000815 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000816 newframe = max(0, self.curindex - count)
817 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000818 do_u = do_up
819
820 def do_down(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000821 """d(own) [count]
822 Move the current frame count (default one) levels down in the
823 stack trace (to a newer frame).
824 """
Tim Peters2344fae2001-01-15 00:50:52 +0000825 if self.curindex + 1 == len(self.stack):
Georg Brandl0d089622010-07-30 16:00:46 +0000826 self.error('Newest frame')
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000827 return
828 try:
829 count = int(arg or 1)
830 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000831 self.error('Invalid frame count (%s)' % arg)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000832 return
833 if count < 0:
834 newframe = len(self.stack) - 1
Tim Peters2344fae2001-01-15 00:50:52 +0000835 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000836 newframe = min(len(self.stack) - 1, self.curindex + count)
837 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000838 do_d = do_down
839
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000840 def do_until(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000841 """unt(il) [lineno]
842 Without argument, continue execution until the line with a
843 number greater than the current one is reached. With a line
844 number, continue execution until a line with a number greater
845 or equal to that is reached. In both cases, also stop when
846 the current frame returns.
847 """
Georg Brandl2dfec552010-07-30 08:43:32 +0000848 if arg:
849 try:
850 lineno = int(arg)
851 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000852 self.error('Error in argument: %r' % arg)
Georg Brandl2dfec552010-07-30 08:43:32 +0000853 return
854 if lineno <= self.curframe.f_lineno:
Georg Brandl0d089622010-07-30 16:00:46 +0000855 self.error('"until" line number is smaller than current '
856 'line number')
Georg Brandl2dfec552010-07-30 08:43:32 +0000857 return
858 else:
859 lineno = None
860 self.set_until(self.curframe, lineno)
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000861 return 1
862 do_unt = do_until
863
Tim Peters2344fae2001-01-15 00:50:52 +0000864 def do_step(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000865 """s(tep)
866 Execute the current line, stop at the first possible occasion
867 (either in a function that is called or in the current
868 function).
869 """
Tim Peters2344fae2001-01-15 00:50:52 +0000870 self.set_step()
871 return 1
872 do_s = do_step
873
874 def do_next(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000875 """n(ext)
876 Continue execution until the next line in the current function
877 is reached or it returns.
878 """
Tim Peters2344fae2001-01-15 00:50:52 +0000879 self.set_next(self.curframe)
880 return 1
881 do_n = do_next
882
Guido van Rossumd8faa362007-04-27 19:54:29 +0000883 def do_run(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000884 """run [args...]
885 Restart the debugged python program. If a string is supplied
886 it is splitted with "shlex", and the result is used as the new
887 sys.argv. History, breakpoints, actions and debugger options
888 are preserved. "restart" is an alias for "run".
889 """
Guido van Rossumd8faa362007-04-27 19:54:29 +0000890 if arg:
891 import shlex
892 argv0 = sys.argv[0:1]
893 sys.argv = shlex.split(arg)
894 sys.argv[:0] = argv0
Georg Brandl0d089622010-07-30 16:00:46 +0000895 # this is caught in the main debugger loop
Guido van Rossumd8faa362007-04-27 19:54:29 +0000896 raise Restart
897
898 do_restart = do_run
899
Tim Peters2344fae2001-01-15 00:50:52 +0000900 def do_return(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000901 """r(eturn)
902 Continue execution until the current function returns.
903 """
Tim Peters2344fae2001-01-15 00:50:52 +0000904 self.set_return(self.curframe)
905 return 1
906 do_r = do_return
907
908 def do_continue(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000909 """c(ont(inue))
910 Continue execution, only stop when a breakpoint is encountered.
911 """
Tim Peters2344fae2001-01-15 00:50:52 +0000912 self.set_continue()
913 return 1
914 do_c = do_cont = do_continue
915
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000916 def do_jump(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000917 """j(ump) lineno
918 Set the next line that will be executed. Only available in
919 the bottom-most frame. This lets you jump back and execute
920 code again, or jump forward to skip code that you don't want
921 to run.
922
923 It should be noted that not all jumps are allowed -- for
924 instance it is not possible to jump into the middle of a
925 for loop or out of a finally clause.
926 """
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000927 if self.curindex + 1 != len(self.stack):
Georg Brandl0d089622010-07-30 16:00:46 +0000928 self.error('You can only jump within the bottom frame')
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000929 return
930 try:
931 arg = int(arg)
932 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000933 self.error("The 'jump' command requires a line number")
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000934 else:
935 try:
936 # Do the jump, fix up our copy of the stack, and display the
937 # new position
938 self.curframe.f_lineno = arg
939 self.stack[self.curindex] = self.stack[self.curindex][0], arg
940 self.print_stack_entry(self.stack[self.curindex])
Guido van Rossumb940e112007-01-10 16:19:56 +0000941 except ValueError as e:
Georg Brandl0d089622010-07-30 16:00:46 +0000942 self.error('Jump failed: %s' % e)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000943 do_j = do_jump
944
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000945 def do_debug(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000946 """debug code
947 Enter a recursive debugger that steps through the code
948 argument (which is an arbitrary expression or statement to be
949 executed in the current environment).
950 """
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000951 sys.settrace(None)
952 globals = self.curframe.f_globals
Benjamin Petersond23f8222009-04-05 19:13:16 +0000953 locals = self.curframe_locals
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000954 p = Pdb(self.completekey, self.stdin, self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000955 p.prompt = "(%s) " % self.prompt.strip()
Georg Brandl0d089622010-07-30 16:00:46 +0000956 self.message("ENTERING RECURSIVE DEBUGGER")
Guido van Rossumed538d82003-04-09 19:36:34 +0000957 sys.call_tracing(p.run, (arg, globals, locals))
Georg Brandl0d089622010-07-30 16:00:46 +0000958 self.message("LEAVING RECURSIVE DEBUGGER")
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000959 sys.settrace(self.trace_dispatch)
960 self.lastcmd = p.lastcmd
961
Tim Peters2344fae2001-01-15 00:50:52 +0000962 def do_quit(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000963 """q(uit)\nexit
964 Quit from the debugger. The program being executed is aborted.
965 """
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000966 self._user_requested_quit = True
Tim Peters2344fae2001-01-15 00:50:52 +0000967 self.set_quit()
968 return 1
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000969
Tim Peters2344fae2001-01-15 00:50:52 +0000970 do_q = do_quit
Guido van Rossumd1c08f32002-04-15 00:48:24 +0000971 do_exit = do_quit
Tim Peters2344fae2001-01-15 00:50:52 +0000972
Guido van Rossumeef26072003-01-13 21:13:55 +0000973 def do_EOF(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000974 """EOF
975 Handles the receipt of EOF as a command.
976 """
977 self.message('')
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000978 self._user_requested_quit = True
Guido van Rossumeef26072003-01-13 21:13:55 +0000979 self.set_quit()
980 return 1
981
Tim Peters2344fae2001-01-15 00:50:52 +0000982 def do_args(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000983 """a(rgs)
984 Print the argument list of the current function.
985 """
Benjamin Petersond23f8222009-04-05 19:13:16 +0000986 co = self.curframe.f_code
987 dict = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000988 n = co.co_argcount
989 if co.co_flags & 4: n = n+1
990 if co.co_flags & 8: n = n+1
991 for i in range(n):
992 name = co.co_varnames[i]
Georg Brandl0d089622010-07-30 16:00:46 +0000993 if name in dict:
994 self.message('%s = %r' % (name, dict[name]))
995 else:
996 self.message('%s = *** undefined ***' % (name,))
Tim Peters2344fae2001-01-15 00:50:52 +0000997 do_a = do_args
Guido van Rossum2424f851998-09-11 22:50:09 +0000998
Tim Peters2344fae2001-01-15 00:50:52 +0000999 def do_retval(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001000 """retval
1001 Print the return value for the last return of a function.
1002 """
Benjamin Petersond23f8222009-04-05 19:13:16 +00001003 if '__return__' in self.curframe_locals:
Georg Brandl0d089622010-07-30 16:00:46 +00001004 self.message(repr(self.curframe_locals['__return__']))
Tim Peters2344fae2001-01-15 00:50:52 +00001005 else:
Georg Brandl0d089622010-07-30 16:00:46 +00001006 self.error('Not yet returned!')
Tim Peters2344fae2001-01-15 00:50:52 +00001007 do_rv = do_retval
Guido van Rossum2424f851998-09-11 22:50:09 +00001008
Barry Warsaw210bd202002-11-05 22:40:20 +00001009 def _getval(self, arg):
Tim Peters2344fae2001-01-15 00:50:52 +00001010 try:
Benjamin Petersond23f8222009-04-05 19:13:16 +00001011 return eval(arg, self.curframe.f_globals, self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +00001012 except:
Georg Brandl0d089622010-07-30 16:00:46 +00001013 exc_info = sys.exc_info()[:2]
1014 self.error(traceback.format_exception_only(*exc_info)[-1].strip())
Barry Warsaw210bd202002-11-05 22:40:20 +00001015 raise
Guido van Rossum2424f851998-09-11 22:50:09 +00001016
Barry Warsaw210bd202002-11-05 22:40:20 +00001017 def do_p(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001018 """p(rint) expression
1019 Print the value of the expression.
1020 """
Barry Warsaw210bd202002-11-05 22:40:20 +00001021 try:
Georg Brandl0d089622010-07-30 16:00:46 +00001022 self.message(repr(self._getval(arg)))
Barry Warsaw210bd202002-11-05 22:40:20 +00001023 except:
1024 pass
Georg Brandlc9879242007-09-04 07:07:56 +00001025 # make "print" an alias of "p" since print isn't a Python statement anymore
1026 do_print = do_p
Barry Warsaw210bd202002-11-05 22:40:20 +00001027
1028 def do_pp(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001029 """pp expression
1030 Pretty-print the value of the expression.
1031 """
Barry Warsaw210bd202002-11-05 22:40:20 +00001032 try:
Georg Brandl0d089622010-07-30 16:00:46 +00001033 self.message(pprint.pformat(self._getval(arg)))
Barry Warsaw210bd202002-11-05 22:40:20 +00001034 except:
1035 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001036
Tim Peters2344fae2001-01-15 00:50:52 +00001037 def do_list(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001038 """l(ist) [first [,last] | .]
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001039
1040 List source code for the current file. Without arguments,
1041 list 11 lines around the current line or continue the previous
1042 listing. With . as argument, list 11 lines around the current
1043 line. With one argument, list 11 lines starting at that line.
1044 With two arguments, list the given range; if the second
1045 argument is less than the first, it is a count.
1046
1047 The current line in the current frame is indicated by "->".
1048 If an exception is being debugged, the line where the
1049 exception was originally raised or propagated is indicated by
1050 ">>", if it differs from the current line.
Georg Brandl0d089622010-07-30 16:00:46 +00001051 """
Tim Peters2344fae2001-01-15 00:50:52 +00001052 self.lastcmd = 'list'
1053 last = None
Georg Brandla91a94b2010-07-30 07:14:01 +00001054 if arg and arg != '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001055 try:
Georg Brandl0d089622010-07-30 16:00:46 +00001056 if ',' in arg:
1057 first, last = arg.split(',')
1058 first = int(first.strip())
1059 last = int(last.strip())
Tim Peters2344fae2001-01-15 00:50:52 +00001060 if last < first:
Georg Brandl0d089622010-07-30 16:00:46 +00001061 # assume it's a count
Tim Peters2344fae2001-01-15 00:50:52 +00001062 last = first + last
1063 else:
Georg Brandl0d089622010-07-30 16:00:46 +00001064 first = int(arg.strip())
1065 first = max(1, first - 5)
1066 except ValueError:
1067 self.error('Error in argument: %r' % arg)
Tim Peters2344fae2001-01-15 00:50:52 +00001068 return
Georg Brandla91a94b2010-07-30 07:14:01 +00001069 elif self.lineno is None or arg == '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001070 first = max(1, self.curframe.f_lineno - 5)
1071 else:
1072 first = self.lineno + 1
1073 if last is None:
1074 last = first + 10
1075 filename = self.curframe.f_code.co_filename
1076 breaklist = self.get_file_breaks(filename)
1077 try:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001078 lines = linecache.getlines(filename, self.curframe.f_globals)
1079 self._print_lines(lines[first-1:last], first, breaklist,
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001080 self.curframe)
Georg Brandle59ca2a2010-07-30 17:04:28 +00001081 self.lineno = min(last, len(lines))
1082 if len(lines) < last:
1083 self.message('[EOF]')
Tim Peters2344fae2001-01-15 00:50:52 +00001084 except KeyboardInterrupt:
1085 pass
1086 do_l = do_list
Guido van Rossum2424f851998-09-11 22:50:09 +00001087
Georg Brandle59ca2a2010-07-30 17:04:28 +00001088 def do_longlist(self, arg):
1089 """longlist | ll
1090 List the whole source code for the current function or frame.
1091 """
1092 filename = self.curframe.f_code.co_filename
1093 breaklist = self.get_file_breaks(filename)
1094 try:
Georg Brandl5ed2b5a2010-07-30 18:08:12 +00001095 lines, lineno = getsourcelines(self.curframe)
Georg Brandle59ca2a2010-07-30 17:04:28 +00001096 except IOError as err:
1097 self.error(err)
1098 return
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001099 self._print_lines(lines, lineno, breaklist, self.curframe)
Georg Brandle59ca2a2010-07-30 17:04:28 +00001100 do_ll = do_longlist
1101
1102 def do_source(self, arg):
1103 """source expression
1104 Try to get source code for the given object and display it.
1105 """
1106 try:
1107 obj = self._getval(arg)
1108 except:
1109 return
1110 try:
Georg Brandl5ed2b5a2010-07-30 18:08:12 +00001111 lines, lineno = getsourcelines(obj)
Georg Brandle59ca2a2010-07-30 17:04:28 +00001112 except (IOError, TypeError) as err:
1113 self.error(err)
1114 return
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001115 self._print_lines(lines, lineno)
Georg Brandle59ca2a2010-07-30 17:04:28 +00001116
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001117 def _print_lines(self, lines, start, breaks=(), frame=None):
Georg Brandle59ca2a2010-07-30 17:04:28 +00001118 """Print a range of lines."""
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001119 if frame:
1120 current_lineno = frame.f_lineno
1121 exc_lineno = self.tb_lineno.get(frame, -1)
1122 else:
1123 current_lineno = exc_lineno = -1
Georg Brandle59ca2a2010-07-30 17:04:28 +00001124 for lineno, line in enumerate(lines, start):
1125 s = str(lineno).rjust(3)
1126 if len(s) < 4:
1127 s += ' '
1128 if lineno in breaks:
1129 s += 'B'
1130 else:
1131 s += ' '
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001132 if lineno == current_lineno:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001133 s += '->'
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001134 elif lineno == exc_lineno:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001135 s += '>>'
1136 self.message(s + '\t' + line.rstrip())
1137
Tim Peters2344fae2001-01-15 00:50:52 +00001138 def do_whatis(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001139 """whatis arg
1140 Print the type of the argument.
1141 """
Tim Peters2344fae2001-01-15 00:50:52 +00001142 try:
Georg Brandl0d089622010-07-30 16:00:46 +00001143 value = self._getval(arg)
Tim Peters2344fae2001-01-15 00:50:52 +00001144 except:
Georg Brandl0d089622010-07-30 16:00:46 +00001145 # _getval() already printed the error
Tim Peters2344fae2001-01-15 00:50:52 +00001146 return
1147 code = None
1148 # Is it a function?
Georg Brandl0d089622010-07-30 16:00:46 +00001149 try:
1150 code = value.__code__
1151 except Exception:
1152 pass
Tim Peters2344fae2001-01-15 00:50:52 +00001153 if code:
Georg Brandl0d089622010-07-30 16:00:46 +00001154 self.message('Function %s' % code.co_name)
Tim Peters2344fae2001-01-15 00:50:52 +00001155 return
1156 # Is it an instance method?
Georg Brandl0d089622010-07-30 16:00:46 +00001157 try:
1158 code = value.__func__.__code__
1159 except Exception:
1160 pass
Tim Peters2344fae2001-01-15 00:50:52 +00001161 if code:
Georg Brandl0d089622010-07-30 16:00:46 +00001162 self.message('Method %s' % code.co_name)
1163 return
1164 # Is it a class?
1165 if value.__class__ is type:
1166 self.message('Class %s.%s' % (value.__module__, value.__name__))
Tim Peters2344fae2001-01-15 00:50:52 +00001167 return
1168 # None of the above...
Georg Brandl0d089622010-07-30 16:00:46 +00001169 self.message(type(value))
Guido van Rossum8e2ec561993-07-29 09:37:38 +00001170
Georg Brandl1acb7462010-12-04 11:20:26 +00001171 def do_interact(self, arg):
1172 """interact
1173
1174 Start an interative interpreter whose global namespace
1175 contains all the (global and local) names found in the current scope.
1176 """
1177 ns = self.curframe.f_globals.copy()
1178 ns.update(self.curframe_locals)
1179 code.interact("*interactive*", local=ns)
1180
Tim Peters2344fae2001-01-15 00:50:52 +00001181 def do_alias(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001182 """alias [name [command [parameter parameter ...] ]]
1183 Create an alias called 'name' that executes 'command'. The
1184 command must *not* be enclosed in quotes. Replaceable
1185 parameters can be indicated by %1, %2, and so on, while %* is
1186 replaced by all the parameters. If no command is given, the
1187 current alias for name is shown. If no name is given, all
1188 aliases are listed.
1189
1190 Aliases may be nested and can contain anything that can be
1191 legally typed at the pdb prompt. Note! You *can* override
1192 internal pdb commands with aliases! Those internal commands
1193 are then hidden until the alias is removed. Aliasing is
1194 recursively applied to the first word of the command line; all
1195 other words in the line are left alone.
1196
1197 As an example, here are two useful aliases (especially when
1198 placed in the .pdbrc file):
1199
1200 # Print instance variables (usage "pi classInst")
1201 alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
1202 # Print instance variables in self
1203 alias ps pi self
1204 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001205 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001206 if len(args) == 0:
Benjamin Petersonbe74a372009-09-11 21:17:13 +00001207 keys = sorted(self.aliases.keys())
Tim Peters2344fae2001-01-15 00:50:52 +00001208 for alias in keys:
Georg Brandl0d089622010-07-30 16:00:46 +00001209 self.message("%s = %s" % (alias, self.aliases[alias]))
Tim Peters2344fae2001-01-15 00:50:52 +00001210 return
Guido van Rossum08454592002-07-12 13:10:53 +00001211 if args[0] in self.aliases and len(args) == 1:
Georg Brandl0d089622010-07-30 16:00:46 +00001212 self.message("%s = %s" % (args[0], self.aliases[args[0]]))
Tim Peters2344fae2001-01-15 00:50:52 +00001213 else:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001214 self.aliases[args[0]] = ' '.join(args[1:])
Guido van Rossum23efba41992-01-27 16:58:47 +00001215
Tim Peters2344fae2001-01-15 00:50:52 +00001216 def do_unalias(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001217 """unalias name
1218 Delete the specified alias.
1219 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001220 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001221 if len(args) == 0: return
Raymond Hettinger54f02222002-06-01 14:18:47 +00001222 if args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +00001223 del self.aliases[args[0]]
Guido van Rossum00230781993-03-29 11:39:45 +00001224
Georg Brandl0d089622010-07-30 16:00:46 +00001225 # List of all the commands making the program resume execution.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001226 commands_resuming = ['do_continue', 'do_step', 'do_next', 'do_return',
1227 'do_quit', 'do_jump']
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001228
Tim Peters2344fae2001-01-15 00:50:52 +00001229 # Print a traceback starting at the top stack frame.
1230 # The most recently entered frame is printed last;
1231 # this is different from dbx and gdb, but consistent with
1232 # the Python interpreter's stack trace.
1233 # It is also consistent with the up/down commands (which are
1234 # compatible with dbx and gdb: up moves towards 'main()'
1235 # and down moves towards the most recent stack frame).
Guido van Rossum2424f851998-09-11 22:50:09 +00001236
Tim Peters2344fae2001-01-15 00:50:52 +00001237 def print_stack_trace(self):
1238 try:
1239 for frame_lineno in self.stack:
1240 self.print_stack_entry(frame_lineno)
1241 except KeyboardInterrupt:
1242 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001243
Tim Peters2344fae2001-01-15 00:50:52 +00001244 def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix):
1245 frame, lineno = frame_lineno
1246 if frame is self.curframe:
Georg Brandl0d089622010-07-30 16:00:46 +00001247 prefix = '> '
Tim Peters2344fae2001-01-15 00:50:52 +00001248 else:
Georg Brandl0d089622010-07-30 16:00:46 +00001249 prefix = ' '
1250 self.message(prefix +
1251 self.format_stack_entry(frame_lineno, prompt_prefix))
Guido van Rossum2424f851998-09-11 22:50:09 +00001252
Georg Brandl0d089622010-07-30 16:00:46 +00001253 # Provide help
Guido van Rossum921c8241992-01-10 14:54:42 +00001254
Georg Brandl0d089622010-07-30 16:00:46 +00001255 def do_help(self, arg):
1256 """h(elp)
1257 Without argument, print the list of available commands.
1258 With a command name as argument, print help about that command.
1259 "help pdb" shows the full pdb documentation.
1260 "help exec" gives help on the ! command.
1261 """
1262 if not arg:
1263 return cmd.Cmd.do_help(self, arg)
1264 try:
1265 try:
1266 topic = getattr(self, 'help_' + arg)
1267 return topic()
1268 except AttributeError:
1269 command = getattr(self, 'do_' + arg)
1270 except AttributeError:
1271 self.error('No help for %r' % arg)
1272 else:
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001273 if sys.flags.optimize >= 2:
1274 self.error('No help for %r; please do not run Python with -OO '
1275 'if you need command help' % arg)
1276 return
Georg Brandl0d089622010-07-30 16:00:46 +00001277 self.message(command.__doc__.rstrip())
Guido van Rossum921c8241992-01-10 14:54:42 +00001278
Georg Brandl0d089622010-07-30 16:00:46 +00001279 do_h = do_help
Barry Warsaw210bd202002-11-05 22:40:20 +00001280
Tim Peters2344fae2001-01-15 00:50:52 +00001281 def help_exec(self):
Georg Brandl0d089622010-07-30 16:00:46 +00001282 """(!) statement
1283 Execute the (one-line) statement in the context of the current
1284 stack frame. The exclamation point can be omitted unless the
1285 first word of the statement resembles a debugger command. To
1286 assign to a global variable you must always prefix the command
1287 with a 'global' command, e.g.:
1288 (Pdb) global list_options; list_options = ['-l']
1289 (Pdb)
1290 """
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001291 self.message((self.help_exec.__doc__ or '').strip())
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001292
Tim Peters2344fae2001-01-15 00:50:52 +00001293 def help_pdb(self):
1294 help()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001295
Georg Brandl0d089622010-07-30 16:00:46 +00001296 # other helper functions
1297
Tim Peters2344fae2001-01-15 00:50:52 +00001298 def lookupmodule(self, filename):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001299 """Helper function for break/clear parsing -- may be overridden.
1300
1301 lookupmodule() translates (possibly incomplete) file or module name
1302 into an absolute file name.
1303 """
1304 if os.path.isabs(filename) and os.path.exists(filename):
Tim Peterse718f612004-10-12 21:51:32 +00001305 return filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001306 f = os.path.join(sys.path[0], filename)
1307 if os.path.exists(f) and self.canonic(f) == self.mainpyfile:
1308 return f
Tim Peters2344fae2001-01-15 00:50:52 +00001309 root, ext = os.path.splitext(filename)
1310 if ext == '':
1311 filename = filename + '.py'
1312 if os.path.isabs(filename):
1313 return filename
1314 for dirname in sys.path:
1315 while os.path.islink(dirname):
1316 dirname = os.readlink(dirname)
1317 fullname = os.path.join(dirname, filename)
1318 if os.path.exists(fullname):
1319 return fullname
1320 return None
Guido van Rossumb5699c71998-07-20 23:13:54 +00001321
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001322 def _runscript(self, filename):
Guido van Rossumd8faa362007-04-27 19:54:29 +00001323 # The script has to run in __main__ namespace (or imports from
1324 # __main__ will break).
1325 #
1326 # So we clear up the __main__ and set several special variables
1327 # (this gets rid of pdb's globals and cleans old variables on restarts).
1328 import __main__
1329 __main__.__dict__.clear()
1330 __main__.__dict__.update({"__name__" : "__main__",
1331 "__file__" : filename,
1332 "__builtins__": __builtins__,
1333 })
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001334
1335 # When bdb sets tracing, a number of call and line events happens
1336 # BEFORE debugger even reaches user's code (and the exact sequence of
1337 # events depends on python version). So we take special measures to
1338 # avoid stopping before we reach the main script (see user_line and
1339 # user_call for details).
Georg Brandlac9a2bb2010-11-29 20:19:15 +00001340 self._wait_for_mainpyfile = True
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001341 self.mainpyfile = self.canonic(filename)
Georg Brandlac9a2bb2010-11-29 20:19:15 +00001342 self._user_requested_quit = False
Georg Brandld07ac642009-08-13 07:50:57 +00001343 with open(filename, "rb") as fp:
1344 statement = "exec(compile(%r, %r, 'exec'))" % \
1345 (fp.read(), self.mainpyfile)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001346 self.run(statement)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001347
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001348# Collect all command help into docstring, if not run with -OO
Georg Brandl0d089622010-07-30 16:00:46 +00001349
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001350if __doc__ is not None:
1351 # unfortunately we can't guess this order from the class definition
1352 _help_order = [
1353 'help', 'where', 'down', 'up', 'break', 'tbreak', 'clear', 'disable',
1354 'enable', 'ignore', 'condition', 'commands', 'step', 'next', 'until',
1355 'jump', 'return', 'retval', 'run', 'continue', 'list', 'longlist',
Georg Brandl1acb7462010-12-04 11:20:26 +00001356 'args', 'print', 'pp', 'whatis', 'source', 'interact', 'alias',
1357 'unalias', 'debug', 'quit',
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001358 ]
Georg Brandl0d089622010-07-30 16:00:46 +00001359
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001360 for _command in _help_order:
1361 __doc__ += getattr(Pdb, 'do_' + _command).__doc__.strip() + '\n\n'
1362 __doc__ += Pdb.help_exec.__doc__
Georg Brandl0d089622010-07-30 16:00:46 +00001363
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001364 del _help_order, _command
1365
Georg Brandl0d089622010-07-30 16:00:46 +00001366
Guido van Rossum35771131992-09-08 11:59:04 +00001367# Simplified interface
1368
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001369def run(statement, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001370 Pdb().run(statement, globals, locals)
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001371
1372def runeval(expression, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001373 return Pdb().runeval(expression, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001374
1375def runctx(statement, globals, locals):
Tim Peters2344fae2001-01-15 00:50:52 +00001376 # B/W compatibility
1377 run(statement, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001378
Raymond Hettinger2ef7e6c2004-10-24 00:32:24 +00001379def runcall(*args, **kwds):
1380 return Pdb().runcall(*args, **kwds)
Guido van Rossum4e160981992-09-02 20:43:20 +00001381
Guido van Rossumb6775db1994-08-01 11:34:53 +00001382def set_trace():
Johannes Gijsbers84a6c202004-11-07 11:35:30 +00001383 Pdb().set_trace(sys._getframe().f_back)
Guido van Rossum35771131992-09-08 11:59:04 +00001384
1385# Post-Mortem interface
1386
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001387def post_mortem(t=None):
1388 # handling the default
1389 if t is None:
1390 # sys.exc_info() returns (type, value, traceback) if an exception is
1391 # being handled, otherwise it returns None
1392 t = sys.exc_info()[2]
Georg Brandl0d089622010-07-30 16:00:46 +00001393 if t is None:
1394 raise ValueError("A valid traceback must be passed if no "
1395 "exception is being handled")
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001396
Tim Peters2344fae2001-01-15 00:50:52 +00001397 p = Pdb()
1398 p.reset()
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001399 p.interaction(None, t)
Guido van Rossum35771131992-09-08 11:59:04 +00001400
1401def pm():
Tim Peters2344fae2001-01-15 00:50:52 +00001402 post_mortem(sys.last_traceback)
Guido van Rossum35771131992-09-08 11:59:04 +00001403
1404
1405# Main program for testing
1406
Guido van Rossum23efba41992-01-27 16:58:47 +00001407TESTCMD = 'import x; x.main()'
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001408
Guido van Rossum921c8241992-01-10 14:54:42 +00001409def test():
Tim Peters2344fae2001-01-15 00:50:52 +00001410 run(TESTCMD)
Guido van Rossume61fa0a1993-10-22 13:56:35 +00001411
1412# print help
1413def help():
Georg Brandl02053ee2010-07-18 10:11:03 +00001414 import pydoc
1415 pydoc.pager(__doc__)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001416
Georg Brandle0230912010-07-30 08:29:39 +00001417_usage = """\
1418usage: pdb.py [-c command] ... pyfile [arg] ...
1419
1420Debug the Python program given by pyfile.
1421
1422Initial commands are read from .pdbrc files in your home directory
1423and in the current directory, if they exist. Commands supplied with
1424-c are executed after commands from .pdbrc files.
1425
1426To let the script run until an exception occurs, use "-c continue".
Georg Brandl2dfec552010-07-30 08:43:32 +00001427To let the script run up to a given line X in the debugged file, use
1428"-c 'until X'"."""
Georg Brandle0230912010-07-30 08:29:39 +00001429
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001430def main():
Georg Brandle0230912010-07-30 08:29:39 +00001431 import getopt
1432
1433 opts, args = getopt.getopt(sys.argv[1:], 'hc:', ['--help', '--command='])
1434
1435 if not args:
1436 print(_usage)
Tim Peters2344fae2001-01-15 00:50:52 +00001437 sys.exit(2)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001438
Georg Brandle0230912010-07-30 08:29:39 +00001439 commands = []
1440 for opt, optarg in opts:
1441 if opt in ['-h', '--help']:
1442 print(_usage)
1443 sys.exit()
1444 elif opt in ['-c', '--command']:
1445 commands.append(optarg)
1446
1447 mainpyfile = args[0] # Get script filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001448 if not os.path.exists(mainpyfile):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001449 print('Error:', mainpyfile, 'does not exist')
Tim Peters2344fae2001-01-15 00:50:52 +00001450 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001451
Georg Brandle0230912010-07-30 08:29:39 +00001452 sys.argv[:] = args # Hide "pdb.py" and pdb options from argument list
Guido van Rossumec577d51996-09-10 17:39:34 +00001453
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001454 # Replace pdb's dir with script's dir in front of module search path.
1455 sys.path[0] = os.path.dirname(mainpyfile)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001456
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001457 # Note on saving/restoring sys.argv: it's a good idea when sys.argv was
1458 # modified by the script being debugged. It's a bad idea when it was
Georg Brandl3078df02009-05-05 09:11:31 +00001459 # changed by the user from the command line. There is a "restart" command
1460 # which allows explicit specification of command line arguments.
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001461 pdb = Pdb()
Georg Brandle0230912010-07-30 08:29:39 +00001462 pdb.rcLines.extend(commands)
Georg Brandl1e30bd32010-07-30 07:21:26 +00001463 while True:
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001464 try:
1465 pdb._runscript(mainpyfile)
1466 if pdb._user_requested_quit:
1467 break
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001468 print("The program finished and will be restarted")
Guido van Rossumd8faa362007-04-27 19:54:29 +00001469 except Restart:
1470 print("Restarting", mainpyfile, "with arguments:")
Georg Brandle0230912010-07-30 08:29:39 +00001471 print("\t" + " ".join(args))
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001472 except SystemExit:
1473 # In most cases SystemExit does not warrant a post-mortem session.
Georg Brandle0230912010-07-30 08:29:39 +00001474 print("The program exited via sys.exit(). Exit status:", end=' ')
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001475 print(sys.exc_info()[1])
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001476 except:
1477 traceback.print_exc()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001478 print("Uncaught exception. Entering post mortem debugging")
1479 print("Running 'cont' or 'step' will restart the program")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001480 t = sys.exc_info()[2]
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001481 pdb.interaction(None, t)
Georg Brandl3078df02009-05-05 09:11:31 +00001482 print("Post mortem debugger finished. The " + mainpyfile +
1483 " will be restarted")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001484
1485
1486# When invoked as main program, invoke the debugger on a script
Guido van Rossumd8faa362007-04-27 19:54:29 +00001487if __name__ == '__main__':
1488 import pdb
1489 pdb.main()