blob: 7eb78b922ae731e548e005bbab6fc253bcf2c43d [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
Łukasz Langa2eb6eca2016-09-09 22:21:17 -070055defined there can be overridden by the local file. This behavior can be
56disabled by passing the "readrc=False" argument to the Pdb constructor.
Georg Brandl02053ee2010-07-18 10:11:03 +000057
58Aside from aliases, the debugger is not directly programmable; but it
59is implemented as a class from which you can derive your own debugger
60class, which you can make as fancy as you like.
61
62
63Debugger commands
64=================
65
Georg Brandl02053ee2010-07-18 10:11:03 +000066"""
Georg Brandl0d089622010-07-30 16:00:46 +000067# NOTE: the actual command documentation is collected from docstrings of the
68# commands and is appended to __doc__ after the class has been defined.
Guido van Rossum921c8241992-01-10 14:54:42 +000069
Georg Brandl44f2b642010-12-04 16:00:47 +000070import os
71import re
Guido van Rossum921c8241992-01-10 14:54:42 +000072import sys
Guido van Rossum23efba41992-01-27 16:58:47 +000073import cmd
74import bdb
Georg Brandl0a9c3e92010-07-30 18:46:38 +000075import dis
Georg Brandl1acb7462010-12-04 11:20:26 +000076import code
Georg Brandl4c7c3c52012-03-10 22:36:48 +010077import glob
Barry Warsaw210bd202002-11-05 22:40:20 +000078import pprint
Georg Brandl44f2b642010-12-04 16:00:47 +000079import signal
Georg Brandle59ca2a2010-07-30 17:04:28 +000080import inspect
Georg Brandl1acb7462010-12-04 11:20:26 +000081import traceback
82import linecache
Guido van Rossumd8faa362007-04-27 19:54:29 +000083
84
85class Restart(Exception):
86 """Causes a debugger to be restarted for the debugged python program."""
87 pass
88
Skip Montanaro352674d2001-02-07 23:14:30 +000089__all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace",
90 "post_mortem", "help"]
91
Barry Warsaw2bee8fe1999-09-09 16:32:41 +000092def find_function(funcname, filename):
Thomas Wouters89f507f2006-12-13 04:49:30 +000093 cre = re.compile(r'def\s+%s\s*[(]' % re.escape(funcname))
Tim Peters2344fae2001-01-15 00:50:52 +000094 try:
95 fp = open(filename)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +020096 except OSError:
Tim Peters2344fae2001-01-15 00:50:52 +000097 return None
98 # consumer of this info expects the first line to be 1
Georg Brandl6e220552013-10-13 20:51:47 +020099 with fp:
100 for lineno, line in enumerate(fp, start=1):
101 if cre.match(line):
102 return funcname, filename, lineno
103 return None
Guido van Rossum921c8241992-01-10 14:54:42 +0000104
Georg Brandl5ed2b5a2010-07-30 18:08:12 +0000105def getsourcelines(obj):
106 lines, lineno = inspect.findsource(obj)
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000107 if inspect.isframe(obj) and obj.f_globals is obj.f_locals:
Georg Brandl5ed2b5a2010-07-30 18:08:12 +0000108 # must be a module frame: do not try to cut a block out of it
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000109 return lines, 1
Georg Brandl5ed2b5a2010-07-30 18:08:12 +0000110 elif inspect.ismodule(obj):
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000111 return lines, 1
Georg Brandl5ed2b5a2010-07-30 18:08:12 +0000112 return inspect.getblock(lines[lineno:]), lineno+1
Guido van Rossum921c8241992-01-10 14:54:42 +0000113
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000114def lasti2lineno(code, lasti):
115 linestarts = list(dis.findlinestarts(code))
116 linestarts.reverse()
117 for i, lineno in linestarts:
118 if lasti >= i:
119 return lineno
120 return 0
121
122
Georg Brandlcbc79c72010-12-04 16:21:42 +0000123class _rstr(str):
124 """String that doesn't quote its repr."""
125 def __repr__(self):
126 return self
127
128
Guido van Rossuma558e371994-11-10 22:27:35 +0000129# Interaction prompt line will separate file and call info from code
130# text using value of line_prefix string. A newline and arrow may
131# be to your liking. You can set it once pdb is imported using the
132# command "pdb.line_prefix = '\n% '".
Tim Peters2344fae2001-01-15 00:50:52 +0000133# line_prefix = ': ' # Use this to get the old situation back
134line_prefix = '\n-> ' # Probably a better default
Guido van Rossuma558e371994-11-10 22:27:35 +0000135
Guido van Rossum23efba41992-01-27 16:58:47 +0000136class Pdb(bdb.Bdb, cmd.Cmd):
Guido van Rossum2424f851998-09-11 22:50:09 +0000137
Georg Brandl44f2b642010-12-04 16:00:47 +0000138 def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None,
Łukasz Langa2eb6eca2016-09-09 22:21:17 -0700139 nosigint=False, readrc=True):
Georg Brandl243ad662009-05-05 09:00:19 +0000140 bdb.Bdb.__init__(self, skip=skip)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000141 cmd.Cmd.__init__(self, completekey, stdin, stdout)
142 if stdout:
143 self.use_rawinput = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000144 self.prompt = '(Pdb) '
145 self.aliases = {}
Georg Brandlcbc79c72010-12-04 16:21:42 +0000146 self.displaying = {}
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000147 self.mainpyfile = ''
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000148 self._wait_for_mainpyfile = False
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000149 self.tb_lineno = {}
Tim Peters2344fae2001-01-15 00:50:52 +0000150 # Try to load readline if it exists
151 try:
152 import readline
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100153 # remove some common file name delimiters
154 readline.set_completer_delims(' \t\n`@#$%^&*()=+[{]}\\|;:\'",<>?')
Brett Cannoncd171c82013-07-04 17:43:24 -0400155 except ImportError:
Tim Peters2344fae2001-01-15 00:50:52 +0000156 pass
Georg Brandl44f2b642010-12-04 16:00:47 +0000157 self.allow_kbdint = False
158 self.nosigint = nosigint
Guido van Rossum2424f851998-09-11 22:50:09 +0000159
Tim Peters2344fae2001-01-15 00:50:52 +0000160 # Read $HOME/.pdbrc and ./.pdbrc
161 self.rcLines = []
Łukasz Langa2eb6eca2016-09-09 22:21:17 -0700162 if readrc:
163 if 'HOME' in os.environ:
164 envHome = os.environ['HOME']
165 try:
166 with open(os.path.join(envHome, ".pdbrc")) as rcFile:
167 self.rcLines.extend(rcFile)
168 except OSError:
169 pass
Tim Peters2344fae2001-01-15 00:50:52 +0000170 try:
Łukasz Langa2eb6eca2016-09-09 22:21:17 -0700171 with open(".pdbrc") as rcFile:
Florent Xicluna7dde7922010-09-03 19:52:03 +0000172 self.rcLines.extend(rcFile)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200173 except OSError:
Tim Peters2344fae2001-01-15 00:50:52 +0000174 pass
Guido van Rossum23efba41992-01-27 16:58:47 +0000175
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000176 self.commands = {} # associates a command list to breakpoint numbers
Benjamin Petersond23f8222009-04-05 19:13:16 +0000177 self.commands_doprompt = {} # for each bp num, tells if the prompt
178 # must be disp. after execing the cmd list
179 self.commands_silent = {} # for each bp num, tells if the stack trace
180 # must be disp. after execing the cmd list
181 self.commands_defining = False # True while in the process of defining
182 # a command list
183 self.commands_bnum = None # The breakpoint number for which we are
184 # defining a list
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000185
Georg Brandl44f2b642010-12-04 16:00:47 +0000186 def sigint_handler(self, signum, frame):
187 if self.allow_kbdint:
188 raise KeyboardInterrupt
189 self.message("\nProgram interrupted. (Use 'cont' to resume).")
190 self.set_step()
191 self.set_trace(frame)
192 # restore previous signal handler
193 signal.signal(signal.SIGINT, self._previous_sigint_handler)
194
Tim Peters2344fae2001-01-15 00:50:52 +0000195 def reset(self):
196 bdb.Bdb.reset(self)
197 self.forget()
Guido van Rossum23efba41992-01-27 16:58:47 +0000198
Tim Peters2344fae2001-01-15 00:50:52 +0000199 def forget(self):
200 self.lineno = None
201 self.stack = []
202 self.curindex = 0
203 self.curframe = None
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000204 self.tb_lineno.clear()
Guido van Rossum2424f851998-09-11 22:50:09 +0000205
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000206 def setup(self, f, tb):
Tim Peters2344fae2001-01-15 00:50:52 +0000207 self.forget()
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000208 self.stack, self.curindex = self.get_stack(f, tb)
209 while tb:
210 # when setting up post-mortem debugging with a traceback, save all
211 # the original line numbers to be displayed along the current line
212 # numbers (which can be different, e.g. due to finally clauses)
213 lineno = lasti2lineno(tb.tb_frame.f_code, tb.tb_lasti)
214 self.tb_lineno[tb.tb_frame] = lineno
215 tb = tb.tb_next
Tim Peters2344fae2001-01-15 00:50:52 +0000216 self.curframe = self.stack[self.curindex][0]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000217 # The f_locals dictionary is updated from the actual frame
218 # locals whenever the .f_locals accessor is called, so we
219 # cache it here to ensure that modifications are not overwritten.
220 self.curframe_locals = self.curframe.f_locals
Georg Brandle0230912010-07-30 08:29:39 +0000221 return self.execRcLines()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000222
Tim Peters2344fae2001-01-15 00:50:52 +0000223 # Can be executed earlier than 'setup' if desired
224 def execRcLines(self):
Georg Brandle0230912010-07-30 08:29:39 +0000225 if not self.rcLines:
226 return
227 # local copy because of recursion
228 rcLines = self.rcLines
229 rcLines.reverse()
230 # execute every line only once
231 self.rcLines = []
232 while rcLines:
233 line = rcLines.pop().strip()
234 if line and line[0] != '#':
235 if self.onecmd(line):
236 # if onecmd returns True, the command wants to exit
237 # from the interaction, save leftover rc lines
238 # to execute before next interaction
239 self.rcLines += reversed(rcLines)
240 return True
Guido van Rossum2424f851998-09-11 22:50:09 +0000241
Tim Peters280488b2002-08-23 18:19:30 +0000242 # Override Bdb methods
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000243
244 def user_call(self, frame, argument_list):
245 """This method is called when there is the remote possibility
246 that we ever need to stop in this function."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000247 if self._wait_for_mainpyfile:
248 return
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000249 if self.stop_here(frame):
Georg Brandl0d089622010-07-30 16:00:46 +0000250 self.message('--Call--')
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000251 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000252
Tim Peters2344fae2001-01-15 00:50:52 +0000253 def user_line(self, frame):
254 """This function is called when we stop or break at this line."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000255 if self._wait_for_mainpyfile:
256 if (self.mainpyfile != self.canonic(frame.f_code.co_filename)
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000257 or frame.f_lineno <= 0):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000258 return
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000259 self._wait_for_mainpyfile = False
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000260 if self.bp_commands(frame):
261 self.interaction(frame, None)
262
Georg Brandle0230912010-07-30 08:29:39 +0000263 def bp_commands(self, frame):
Georg Brandl3078df02009-05-05 09:11:31 +0000264 """Call every command that was set for the current active breakpoint
265 (if there is one).
266
267 Returns True if the normal interaction function must be called,
268 False otherwise."""
269 # self.currentbp is set in bdb in Bdb.break_here if a breakpoint was hit
270 if getattr(self, "currentbp", False) and \
271 self.currentbp in self.commands:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000272 currentbp = self.currentbp
273 self.currentbp = 0
274 lastcmd_back = self.lastcmd
275 self.setup(frame, None)
276 for line in self.commands[currentbp]:
277 self.onecmd(line)
278 self.lastcmd = lastcmd_back
279 if not self.commands_silent[currentbp]:
280 self.print_stack_entry(self.stack[self.curindex])
281 if self.commands_doprompt[currentbp]:
Georg Brandl44f2b642010-12-04 16:00:47 +0000282 self._cmdloop()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000283 self.forget()
284 return
285 return 1
Guido van Rossum9e1ee971997-07-11 13:43:53 +0000286
Tim Peters2344fae2001-01-15 00:50:52 +0000287 def user_return(self, frame, return_value):
288 """This function is called when a return trap is set here."""
Georg Brandl34cc0f52010-07-30 09:43:00 +0000289 if self._wait_for_mainpyfile:
290 return
Tim Peters2344fae2001-01-15 00:50:52 +0000291 frame.f_locals['__return__'] = return_value
Georg Brandl0d089622010-07-30 16:00:46 +0000292 self.message('--Return--')
Tim Peters2344fae2001-01-15 00:50:52 +0000293 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000294
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000295 def user_exception(self, frame, exc_info):
Tim Peters2344fae2001-01-15 00:50:52 +0000296 """This function is called if an exception occurs,
297 but only if we are to stop at or just below this level."""
Georg Brandl34cc0f52010-07-30 09:43:00 +0000298 if self._wait_for_mainpyfile:
299 return
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000300 exc_type, exc_value, exc_traceback = exc_info
Tim Peters2344fae2001-01-15 00:50:52 +0000301 frame.f_locals['__exception__'] = exc_type, exc_value
Guido van Rossum8820c232013-11-21 11:30:06 -0800302
303 # An 'Internal StopIteration' exception is an exception debug event
304 # issued by the interpreter when handling a subgenerator run with
Martin Panter46f50722016-05-26 05:35:26 +0000305 # 'yield from' or a generator controlled by a for loop. No exception has
Berker Peksagf23530f2014-10-19 18:04:38 +0300306 # actually occurred in this case. The debugger uses this debug event to
Guido van Rossum8820c232013-11-21 11:30:06 -0800307 # stop when the debuggee is returning from such generators.
308 prefix = 'Internal ' if (not exc_traceback
309 and exc_type is StopIteration) else ''
310 self.message('%s%s' % (prefix,
311 traceback.format_exception_only(exc_type, exc_value)[-1].strip()))
Tim Peters2344fae2001-01-15 00:50:52 +0000312 self.interaction(frame, exc_traceback)
Guido van Rossum2424f851998-09-11 22:50:09 +0000313
Tim Peters2344fae2001-01-15 00:50:52 +0000314 # General interaction function
Georg Brandl44f2b642010-12-04 16:00:47 +0000315 def _cmdloop(self):
316 while True:
317 try:
318 # keyboard interrupts allow for an easy way to cancel
319 # the current command, so allow them during interactive input
320 self.allow_kbdint = True
321 self.cmdloop()
322 self.allow_kbdint = False
323 break
324 except KeyboardInterrupt:
325 self.message('--KeyboardInterrupt--')
Tim Peters2344fae2001-01-15 00:50:52 +0000326
Georg Brandlcbc79c72010-12-04 16:21:42 +0000327 # Called before loop, handles display expressions
328 def preloop(self):
329 displaying = self.displaying.get(self.curframe)
330 if displaying:
331 for expr, oldvalue in displaying.items():
332 newvalue = self._getval_except(expr)
333 # check for identity first; this prevents custom __eq__ to
334 # be called at every loop, and also prevents instances whose
335 # fields are changed to be displayed
336 if newvalue is not oldvalue and newvalue != oldvalue:
337 displaying[expr] = newvalue
338 self.message('display %s: %r [old: %r]' %
339 (expr, newvalue, oldvalue))
340
Tim Peters2344fae2001-01-15 00:50:52 +0000341 def interaction(self, frame, traceback):
Georg Brandle0230912010-07-30 08:29:39 +0000342 if self.setup(frame, traceback):
343 # no interaction desired at this time (happens if .pdbrc contains
344 # a command like "continue")
345 self.forget()
346 return
Tim Peters2344fae2001-01-15 00:50:52 +0000347 self.print_stack_entry(self.stack[self.curindex])
Georg Brandl44f2b642010-12-04 16:00:47 +0000348 self._cmdloop()
Tim Peters2344fae2001-01-15 00:50:52 +0000349 self.forget()
350
Benjamin Petersond23f8222009-04-05 19:13:16 +0000351 def displayhook(self, obj):
352 """Custom displayhook for the exec in default(), which prevents
353 assignment of the _ variable in the builtins.
354 """
Georg Brandl9fa2e022009-09-16 16:40:45 +0000355 # reproduce the behavior of the standard displayhook, not printing None
356 if obj is not None:
Georg Brandl0d089622010-07-30 16:00:46 +0000357 self.message(repr(obj))
Benjamin Petersond23f8222009-04-05 19:13:16 +0000358
Tim Peters2344fae2001-01-15 00:50:52 +0000359 def default(self, line):
360 if line[:1] == '!': line = line[1:]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000361 locals = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000362 globals = self.curframe.f_globals
363 try:
364 code = compile(line + '\n', '<stdin>', 'single')
Christian Heimes679db4a2008-01-18 09:56:22 +0000365 save_stdout = sys.stdout
366 save_stdin = sys.stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000367 save_displayhook = sys.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000368 try:
369 sys.stdin = self.stdin
370 sys.stdout = self.stdout
Benjamin Petersond23f8222009-04-05 19:13:16 +0000371 sys.displayhook = self.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000372 exec(code, globals, locals)
373 finally:
374 sys.stdout = save_stdout
375 sys.stdin = save_stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000376 sys.displayhook = save_displayhook
Tim Peters2344fae2001-01-15 00:50:52 +0000377 except:
Georg Brandl0d089622010-07-30 16:00:46 +0000378 exc_info = sys.exc_info()[:2]
379 self.error(traceback.format_exception_only(*exc_info)[-1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000380
381 def precmd(self, line):
382 """Handle alias expansion and ';;' separator."""
Guido van Rossum08454592002-07-12 13:10:53 +0000383 if not line.strip():
Tim Peters2344fae2001-01-15 00:50:52 +0000384 return line
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000385 args = line.split()
Raymond Hettinger54f02222002-06-01 14:18:47 +0000386 while args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000387 line = self.aliases[args[0]]
388 ii = 1
389 for tmpArg in args[1:]:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000390 line = line.replace("%" + str(ii),
Tim Peters2344fae2001-01-15 00:50:52 +0000391 tmpArg)
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000392 ii += 1
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000393 line = line.replace("%*", ' '.join(args[1:]))
394 args = line.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000395 # split into ';;' separated commands
396 # unless it's an alias command
397 if args[0] != 'alias':
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000398 marker = line.find(';;')
Tim Peters2344fae2001-01-15 00:50:52 +0000399 if marker >= 0:
400 # queue up everything after marker
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000401 next = line[marker+2:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000402 self.cmdqueue.append(next)
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000403 line = line[:marker].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000404 return line
405
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000406 def onecmd(self, line):
407 """Interpret the argument as though it had been typed in response
408 to the prompt.
409
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000410 Checks whether this line is typed at the normal prompt or in
411 a breakpoint command list definition.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000412 """
413 if not self.commands_defining:
414 return cmd.Cmd.onecmd(self, line)
415 else:
416 return self.handle_command_def(line)
417
Georg Brandlb90ffd82010-07-30 22:20:16 +0000418 def handle_command_def(self, line):
Georg Brandl44f8bf92010-07-30 08:54:49 +0000419 """Handles one command line during command list definition."""
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000420 cmd, arg, line = self.parseline(line)
Georg Brandl44f8bf92010-07-30 08:54:49 +0000421 if not cmd:
422 return
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000423 if cmd == 'silent':
424 self.commands_silent[self.commands_bnum] = True
425 return # continue to handle other cmd def in the cmd list
426 elif cmd == 'end':
427 self.cmdqueue = []
428 return 1 # end of cmd list
429 cmdlist = self.commands[self.commands_bnum]
Georg Brandl44f8bf92010-07-30 08:54:49 +0000430 if arg:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000431 cmdlist.append(cmd+' '+arg)
432 else:
433 cmdlist.append(cmd)
434 # Determine if we must stop
435 try:
436 func = getattr(self, 'do_' + cmd)
437 except AttributeError:
438 func = self.default
Georg Brandl3078df02009-05-05 09:11:31 +0000439 # one of the resuming commands
440 if func.__name__ in self.commands_resuming:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000441 self.commands_doprompt[self.commands_bnum] = False
442 self.cmdqueue = []
443 return 1
444 return
445
Georg Brandl0d089622010-07-30 16:00:46 +0000446 # interface abstraction functions
447
448 def message(self, msg):
449 print(msg, file=self.stdout)
450
451 def error(self, msg):
452 print('***', msg, file=self.stdout)
453
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100454 # Generic completion functions. Individual complete_foo methods can be
455 # assigned below to one of these functions.
456
457 def _complete_location(self, text, line, begidx, endidx):
458 # Complete a file/module/function location for break/tbreak/clear.
459 if line.strip().endswith((':', ',')):
460 # Here comes a line number or a condition which we can't complete.
461 return []
462 # First, try to find matching functions (i.e. expressions).
463 try:
464 ret = self._complete_expression(text, line, begidx, endidx)
465 except Exception:
466 ret = []
467 # Then, try to complete file names as well.
468 globs = glob.glob(text + '*')
469 for fn in globs:
470 if os.path.isdir(fn):
471 ret.append(fn + '/')
472 elif os.path.isfile(fn) and fn.lower().endswith(('.py', '.pyw')):
473 ret.append(fn + ':')
474 return ret
475
476 def _complete_bpnumber(self, text, line, begidx, endidx):
477 # Complete a breakpoint number. (This would be more helpful if we could
478 # display additional info along with the completions, such as file/line
479 # of the breakpoint.)
480 return [str(i) for i, bp in enumerate(bdb.Breakpoint.bpbynumber)
481 if bp is not None and str(i).startswith(text)]
482
483 def _complete_expression(self, text, line, begidx, endidx):
484 # Complete an arbitrary expression.
485 if not self.curframe:
486 return []
487 # Collect globals and locals. It is usually not really sensible to also
488 # complete builtins, and they clutter the namespace quite heavily, so we
489 # leave them out.
490 ns = self.curframe.f_globals.copy()
491 ns.update(self.curframe_locals)
492 if '.' in text:
493 # Walk an attribute chain up to the last part, similar to what
494 # rlcompleter does. This will bail if any of the parts are not
495 # simple attribute access, which is what we want.
496 dotted = text.split('.')
497 try:
498 obj = ns[dotted[0]]
499 for part in dotted[1:-1]:
500 obj = getattr(obj, part)
501 except (KeyError, AttributeError):
502 return []
503 prefix = '.'.join(dotted[:-1]) + '.'
504 return [prefix + n for n in dir(obj) if n.startswith(dotted[-1])]
505 else:
506 # Complete a simple name.
507 return [n for n in ns.keys() if n.startswith(text)]
508
Tim Peters2344fae2001-01-15 00:50:52 +0000509 # Command definitions, called by cmdloop()
510 # The argument is the remaining string on the command line
511 # Return true to exit from the command loop
512
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000513 def do_commands(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000514 """commands [bpnumber]
515 (com) ...
516 (com) end
517 (Pdb)
Georg Brandl3078df02009-05-05 09:11:31 +0000518
Georg Brandl0d089622010-07-30 16:00:46 +0000519 Specify a list of commands for breakpoint number bpnumber.
520 The commands themselves are entered on the following lines.
521 Type a line containing just 'end' to terminate the commands.
522 The commands are executed when the breakpoint is hit.
523
524 To remove all commands from a breakpoint, type commands and
525 follow it immediately with end; that is, give no commands.
526
527 With no bpnumber argument, commands refers to the last
528 breakpoint set.
529
530 You can use breakpoint commands to start your program up
531 again. Simply use the continue command, or step, or any other
532 command that resumes execution.
533
534 Specifying any command resuming execution (currently continue,
535 step, next, return, jump, quit and their abbreviations)
536 terminates the command list (as if that command was
537 immediately followed by end). This is because any time you
538 resume execution (even with a simple next or step), you may
539 encounter another breakpoint -- which could have its own
540 command list, leading to ambiguities about which list to
541 execute.
542
543 If you use the 'silent' command in the command list, the usual
544 message about stopping at a breakpoint is not printed. This
545 may be desirable for breakpoints that are to print a specific
546 message and then continue. If none of the other commands
547 print anything, you will see no sign that the breakpoint was
548 reached.
549 """
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000550 if not arg:
Georg Brandl7410dd12010-07-30 12:01:20 +0000551 bnum = len(bdb.Breakpoint.bpbynumber) - 1
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000552 else:
553 try:
554 bnum = int(arg)
555 except:
Georg Brandl0d089622010-07-30 16:00:46 +0000556 self.error("Usage: commands [bnum]\n ...\n end")
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000557 return
558 self.commands_bnum = bnum
Georg Brandlb90ffd82010-07-30 22:20:16 +0000559 # Save old definitions for the case of a keyboard interrupt.
560 if bnum in self.commands:
561 old_command_defs = (self.commands[bnum],
562 self.commands_doprompt[bnum],
563 self.commands_silent[bnum])
564 else:
565 old_command_defs = None
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000566 self.commands[bnum] = []
567 self.commands_doprompt[bnum] = True
568 self.commands_silent[bnum] = False
Georg Brandlb90ffd82010-07-30 22:20:16 +0000569
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000570 prompt_back = self.prompt
571 self.prompt = '(com) '
572 self.commands_defining = True
Georg Brandl44f8bf92010-07-30 08:54:49 +0000573 try:
574 self.cmdloop()
Georg Brandlb90ffd82010-07-30 22:20:16 +0000575 except KeyboardInterrupt:
576 # Restore old definitions.
577 if old_command_defs:
578 self.commands[bnum] = old_command_defs[0]
579 self.commands_doprompt[bnum] = old_command_defs[1]
580 self.commands_silent[bnum] = old_command_defs[2]
581 else:
582 del self.commands[bnum]
583 del self.commands_doprompt[bnum]
584 del self.commands_silent[bnum]
585 self.error('command definition aborted, old commands restored')
Georg Brandl44f8bf92010-07-30 08:54:49 +0000586 finally:
587 self.commands_defining = False
588 self.prompt = prompt_back
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000589
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100590 complete_commands = _complete_bpnumber
591
Tim Peters2344fae2001-01-15 00:50:52 +0000592 def do_break(self, arg, temporary = 0):
Georg Brandl0d089622010-07-30 16:00:46 +0000593 """b(reak) [ ([filename:]lineno | function) [, condition] ]
594 Without argument, list all breaks.
595
596 With a line number argument, set a break at this line in the
597 current file. With a function name, set a break at the first
598 executable line of that function. If a second argument is
599 present, it is a string specifying an expression which must
600 evaluate to true before the breakpoint is honored.
601
602 The line number may be prefixed with a filename and a colon,
603 to specify a breakpoint in another file (probably one that
604 hasn't been loaded yet). The file is searched for on
605 sys.path; the .py suffix may be omitted.
606 """
Tim Peters2344fae2001-01-15 00:50:52 +0000607 if not arg:
608 if self.breaks: # There's at least one
Georg Brandl0d089622010-07-30 16:00:46 +0000609 self.message("Num Type Disp Enb Where")
Tim Peters2344fae2001-01-15 00:50:52 +0000610 for bp in bdb.Breakpoint.bpbynumber:
611 if bp:
Georg Brandl0d089622010-07-30 16:00:46 +0000612 self.message(bp.bpformat())
Tim Peters2344fae2001-01-15 00:50:52 +0000613 return
614 # parse arguments; comma has lowest precedence
615 # and cannot occur in filename
616 filename = None
617 lineno = None
618 cond = None
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000619 comma = arg.find(',')
Tim Peters2344fae2001-01-15 00:50:52 +0000620 if comma > 0:
621 # parse stuff after comma: "condition"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000622 cond = arg[comma+1:].lstrip()
623 arg = arg[:comma].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000624 # parse stuff before comma: [filename:]lineno | function
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000625 colon = arg.rfind(':')
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000626 funcname = None
Tim Peters2344fae2001-01-15 00:50:52 +0000627 if colon >= 0:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000628 filename = arg[:colon].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000629 f = self.lookupmodule(filename)
630 if not f:
Georg Brandl0d089622010-07-30 16:00:46 +0000631 self.error('%r not found from sys.path' % filename)
Tim Peters2344fae2001-01-15 00:50:52 +0000632 return
633 else:
634 filename = f
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000635 arg = arg[colon+1:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000636 try:
637 lineno = int(arg)
Georg Brandlf93390a2010-10-14 07:17:44 +0000638 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000639 self.error('Bad lineno: %s' % arg)
Tim Peters2344fae2001-01-15 00:50:52 +0000640 return
641 else:
642 # no colon; can be lineno or function
643 try:
644 lineno = int(arg)
645 except ValueError:
646 try:
647 func = eval(arg,
648 self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +0000649 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000650 except:
651 func = arg
652 try:
Christian Heimesff737952007-11-27 10:40:20 +0000653 if hasattr(func, '__func__'):
654 func = func.__func__
Neal Norwitz221085d2007-02-25 20:55:47 +0000655 code = func.__code__
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000656 #use co_name to identify the bkpt (function names
657 #could be aliased, but co_name is invariant)
658 funcname = code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000659 lineno = code.co_firstlineno
660 filename = code.co_filename
661 except:
662 # last thing to try
663 (ok, filename, ln) = self.lineinfo(arg)
664 if not ok:
Georg Brandl0d089622010-07-30 16:00:46 +0000665 self.error('The specified object %r is not a function '
666 'or was not found along sys.path.' % arg)
Tim Peters2344fae2001-01-15 00:50:52 +0000667 return
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000668 funcname = ok # ok contains a function name
Tim Peters2344fae2001-01-15 00:50:52 +0000669 lineno = int(ln)
670 if not filename:
671 filename = self.defaultFile()
672 # Check for reasonable breakpoint
673 line = self.checkline(filename, lineno)
674 if line:
675 # now set the break point
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000676 err = self.set_break(filename, line, temporary, cond, funcname)
Georg Brandl0d089622010-07-30 16:00:46 +0000677 if err:
Berker Peksagad5ffd42014-07-12 18:24:32 +0300678 self.error(err)
Tim Peters2344fae2001-01-15 00:50:52 +0000679 else:
680 bp = self.get_breaks(filename, line)[-1]
Georg Brandl0d089622010-07-30 16:00:46 +0000681 self.message("Breakpoint %d at %s:%d" %
682 (bp.number, bp.file, bp.line))
Tim Peters2344fae2001-01-15 00:50:52 +0000683
684 # To be overridden in derived debuggers
685 def defaultFile(self):
686 """Produce a reasonable default."""
687 filename = self.curframe.f_code.co_filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000688 if filename == '<string>' and self.mainpyfile:
689 filename = self.mainpyfile
Tim Peters2344fae2001-01-15 00:50:52 +0000690 return filename
691
692 do_b = do_break
693
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100694 complete_break = _complete_location
695 complete_b = _complete_location
696
Tim Peters2344fae2001-01-15 00:50:52 +0000697 def do_tbreak(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000698 """tbreak [ ([filename:]lineno | function) [, condition] ]
699 Same arguments as break, but sets a temporary breakpoint: it
700 is automatically deleted when first hit.
701 """
Tim Peters2344fae2001-01-15 00:50:52 +0000702 self.do_break(arg, 1)
703
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100704 complete_tbreak = _complete_location
705
Tim Peters2344fae2001-01-15 00:50:52 +0000706 def lineinfo(self, identifier):
707 failed = (None, None, None)
708 # Input is identifier, may be in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000709 idstring = identifier.split("'")
Tim Peters2344fae2001-01-15 00:50:52 +0000710 if len(idstring) == 1:
711 # not in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000712 id = idstring[0].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000713 elif len(idstring) == 3:
714 # quoted
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000715 id = idstring[1].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000716 else:
717 return failed
718 if id == '': return failed
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000719 parts = id.split('.')
Tim Peters2344fae2001-01-15 00:50:52 +0000720 # Protection for derived debuggers
721 if parts[0] == 'self':
722 del parts[0]
723 if len(parts) == 0:
724 return failed
725 # Best first guess at file to look at
726 fname = self.defaultFile()
727 if len(parts) == 1:
728 item = parts[0]
729 else:
730 # More than one part.
731 # First is module, second is method/class
732 f = self.lookupmodule(parts[0])
733 if f:
734 fname = f
735 item = parts[1]
736 answer = find_function(item, fname)
737 return answer or failed
738
739 def checkline(self, filename, lineno):
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000740 """Check whether specified line seems to be executable.
Tim Peters2344fae2001-01-15 00:50:52 +0000741
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000742 Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank
743 line or EOF). Warning: testing is not comprehensive.
744 """
Georg Brandl1e30bd32010-07-30 07:21:26 +0000745 # this method should be callable before starting debugging, so default
746 # to "no globals" if there is no current frame
747 globs = self.curframe.f_globals if hasattr(self, 'curframe') else None
748 line = linecache.getline(filename, lineno, globs)
Tim Peters2344fae2001-01-15 00:50:52 +0000749 if not line:
Georg Brandl0d089622010-07-30 16:00:46 +0000750 self.message('End of file')
Tim Peters2344fae2001-01-15 00:50:52 +0000751 return 0
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000752 line = line.strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000753 # Don't allow setting breakpoint at a blank line
Guido van Rossum08454592002-07-12 13:10:53 +0000754 if (not line or (line[0] == '#') or
755 (line[:3] == '"""') or line[:3] == "'''"):
Georg Brandl0d089622010-07-30 16:00:46 +0000756 self.error('Blank or comment')
Tim Peters2344fae2001-01-15 00:50:52 +0000757 return 0
Tim Peters2344fae2001-01-15 00:50:52 +0000758 return lineno
759
760 def do_enable(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000761 """enable bpnumber [bpnumber ...]
762 Enables the breakpoints given as a space separated list of
763 breakpoint numbers.
764 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000765 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000766 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000767 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000768 bp = self.get_bpbynumber(i)
769 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000770 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000771 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000772 bp.enable()
Georg Brandl0d089622010-07-30 16:00:46 +0000773 self.message('Enabled %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000774
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100775 complete_enable = _complete_bpnumber
776
Tim Peters2344fae2001-01-15 00:50:52 +0000777 def do_disable(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000778 """disable bpnumber [bpnumber ...]
779 Disables the breakpoints given as a space separated list of
780 breakpoint numbers. Disabling a breakpoint means it cannot
781 cause the program to stop execution, but unlike clearing a
782 breakpoint, it remains in the list of breakpoints and can be
783 (re-)enabled.
784 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000785 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000786 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000787 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000788 bp = self.get_bpbynumber(i)
789 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000790 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000791 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000792 bp.disable()
Georg Brandl0d089622010-07-30 16:00:46 +0000793 self.message('Disabled %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000794
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100795 complete_disable = _complete_bpnumber
796
Tim Peters2344fae2001-01-15 00:50:52 +0000797 def do_condition(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000798 """condition bpnumber [condition]
799 Set a new condition for the breakpoint, an expression which
800 must evaluate to true before the breakpoint is honored. If
801 condition is absent, any existing condition is removed; i.e.,
802 the breakpoint is made unconditional.
803 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000804 args = arg.split(' ', 1)
Thomas Woutersb2137042007-02-01 18:02:27 +0000805 try:
Tim Peters2344fae2001-01-15 00:50:52 +0000806 cond = args[1]
Georg Brandl7410dd12010-07-30 12:01:20 +0000807 except IndexError:
Tim Peters2344fae2001-01-15 00:50:52 +0000808 cond = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000809 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000810 bp = self.get_bpbynumber(args[0].strip())
Georg Brandl0079ffc2013-10-14 16:08:15 +0200811 except IndexError:
812 self.error('Breakpoint number expected')
Georg Brandl7410dd12010-07-30 12:01:20 +0000813 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000814 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000815 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000816 bp.cond = cond
817 if not cond:
Georg Brandl0d089622010-07-30 16:00:46 +0000818 self.message('Breakpoint %d is now unconditional.' % bp.number)
Georg Brandl7410dd12010-07-30 12:01:20 +0000819 else:
Georg Brandl0d089622010-07-30 16:00:46 +0000820 self.message('New condition set for breakpoint %d.' % bp.number)
Tim Peters2344fae2001-01-15 00:50:52 +0000821
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100822 complete_condition = _complete_bpnumber
823
Georg Brandl7410dd12010-07-30 12:01:20 +0000824 def do_ignore(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000825 """ignore bpnumber [count]
826 Set the ignore count for the given breakpoint number. If
827 count is omitted, the ignore count is set to 0. A breakpoint
828 becomes active when the ignore count is zero. When non-zero,
829 the count is decremented each time the breakpoint is reached
830 and the breakpoint is not disabled and any associated
831 condition evaluates to true.
832 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000833 args = arg.split()
Thomas Woutersb2137042007-02-01 18:02:27 +0000834 try:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000835 count = int(args[1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000836 except:
837 count = 0
Guido van Rossumd8faa362007-04-27 19:54:29 +0000838 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000839 bp = self.get_bpbynumber(args[0].strip())
Georg Brandl0079ffc2013-10-14 16:08:15 +0200840 except IndexError:
841 self.error('Breakpoint number expected')
Georg Brandl7410dd12010-07-30 12:01:20 +0000842 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000843 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000844 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000845 bp.ignore = count
Guido van Rossum08454592002-07-12 13:10:53 +0000846 if count > 0:
Guido van Rossum08454592002-07-12 13:10:53 +0000847 if count > 1:
Georg Brandl0d089622010-07-30 16:00:46 +0000848 countstr = '%d crossings' % count
Tim Peters2344fae2001-01-15 00:50:52 +0000849 else:
Georg Brandl0d089622010-07-30 16:00:46 +0000850 countstr = '1 crossing'
851 self.message('Will ignore next %s of breakpoint %d.' %
852 (countstr, bp.number))
Tim Peters2344fae2001-01-15 00:50:52 +0000853 else:
Georg Brandl0d089622010-07-30 16:00:46 +0000854 self.message('Will stop next time breakpoint %d is reached.'
855 % bp.number)
Tim Peters2344fae2001-01-15 00:50:52 +0000856
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100857 complete_ignore = _complete_bpnumber
858
Tim Peters2344fae2001-01-15 00:50:52 +0000859 def do_clear(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000860 """cl(ear) filename:lineno\ncl(ear) [bpnumber [bpnumber...]]
861 With a space separated list of breakpoint numbers, clear
862 those breakpoints. Without argument, clear all breaks (but
863 first ask confirmation). With a filename:lineno argument,
864 clear all breaks at that line in that file.
865 """
Tim Peters2344fae2001-01-15 00:50:52 +0000866 if not arg:
867 try:
Guido van Rossumc5b6ab02007-05-27 09:19:52 +0000868 reply = input('Clear all breaks? ')
Tim Peters2344fae2001-01-15 00:50:52 +0000869 except EOFError:
870 reply = 'no'
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000871 reply = reply.strip().lower()
Tim Peters2344fae2001-01-15 00:50:52 +0000872 if reply in ('y', 'yes'):
Georg Brandl7410dd12010-07-30 12:01:20 +0000873 bplist = [bp for bp in bdb.Breakpoint.bpbynumber if bp]
Tim Peters2344fae2001-01-15 00:50:52 +0000874 self.clear_all_breaks()
Georg Brandl7410dd12010-07-30 12:01:20 +0000875 for bp in bplist:
Georg Brandl0d089622010-07-30 16:00:46 +0000876 self.message('Deleted %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000877 return
878 if ':' in arg:
879 # Make sure it works for "clear C:\foo\bar.py:12"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000880 i = arg.rfind(':')
Tim Peters2344fae2001-01-15 00:50:52 +0000881 filename = arg[:i]
882 arg = arg[i+1:]
883 try:
884 lineno = int(arg)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000885 except ValueError:
Tim Peters2344fae2001-01-15 00:50:52 +0000886 err = "Invalid line number (%s)" % arg
887 else:
Georg Brandl7410dd12010-07-30 12:01:20 +0000888 bplist = self.get_breaks(filename, lineno)
Tim Peters2344fae2001-01-15 00:50:52 +0000889 err = self.clear_break(filename, lineno)
Georg Brandl7410dd12010-07-30 12:01:20 +0000890 if err:
Georg Brandl0d089622010-07-30 16:00:46 +0000891 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000892 else:
893 for bp in bplist:
Georg Brandl0d089622010-07-30 16:00:46 +0000894 self.message('Deleted %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000895 return
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000896 numberlist = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000897 for i in numberlist:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000898 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000899 bp = self.get_bpbynumber(i)
900 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000901 self.error(err)
Tim Peters2344fae2001-01-15 00:50:52 +0000902 else:
Senthil Kumaran6f107042010-11-29 11:54:17 +0000903 self.clear_bpbynumber(i)
Georg Brandl0d089622010-07-30 16:00:46 +0000904 self.message('Deleted %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000905 do_cl = do_clear # 'c' is already an abbreviation for 'continue'
906
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100907 complete_clear = _complete_location
908 complete_cl = _complete_location
909
Tim Peters2344fae2001-01-15 00:50:52 +0000910 def do_where(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000911 """w(here)
912 Print a stack trace, with the most recent frame at the bottom.
913 An arrow indicates the "current frame", which determines the
914 context of most commands. 'bt' is an alias for this command.
915 """
Tim Peters2344fae2001-01-15 00:50:52 +0000916 self.print_stack_trace()
917 do_w = do_where
Guido van Rossum6bd68352001-01-20 17:57:37 +0000918 do_bt = do_where
Tim Peters2344fae2001-01-15 00:50:52 +0000919
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000920 def _select_frame(self, number):
921 assert 0 <= number < len(self.stack)
922 self.curindex = number
923 self.curframe = self.stack[self.curindex][0]
924 self.curframe_locals = self.curframe.f_locals
925 self.print_stack_entry(self.stack[self.curindex])
926 self.lineno = None
927
Tim Peters2344fae2001-01-15 00:50:52 +0000928 def do_up(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000929 """u(p) [count]
930 Move the current frame count (default one) levels up in the
931 stack trace (to an older frame).
932 """
Tim Peters2344fae2001-01-15 00:50:52 +0000933 if self.curindex == 0:
Georg Brandl0d089622010-07-30 16:00:46 +0000934 self.error('Oldest frame')
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000935 return
936 try:
937 count = int(arg or 1)
938 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000939 self.error('Invalid frame count (%s)' % arg)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000940 return
941 if count < 0:
942 newframe = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000943 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000944 newframe = max(0, self.curindex - count)
945 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000946 do_u = do_up
947
948 def do_down(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000949 """d(own) [count]
950 Move the current frame count (default one) levels down in the
951 stack trace (to a newer frame).
952 """
Tim Peters2344fae2001-01-15 00:50:52 +0000953 if self.curindex + 1 == len(self.stack):
Georg Brandl0d089622010-07-30 16:00:46 +0000954 self.error('Newest frame')
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000955 return
956 try:
957 count = int(arg or 1)
958 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000959 self.error('Invalid frame count (%s)' % arg)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000960 return
961 if count < 0:
962 newframe = len(self.stack) - 1
Tim Peters2344fae2001-01-15 00:50:52 +0000963 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000964 newframe = min(len(self.stack) - 1, self.curindex + count)
965 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000966 do_d = do_down
967
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000968 def do_until(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000969 """unt(il) [lineno]
970 Without argument, continue execution until the line with a
971 number greater than the current one is reached. With a line
972 number, continue execution until a line with a number greater
973 or equal to that is reached. In both cases, also stop when
974 the current frame returns.
975 """
Georg Brandl2dfec552010-07-30 08:43:32 +0000976 if arg:
977 try:
978 lineno = int(arg)
979 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000980 self.error('Error in argument: %r' % arg)
Georg Brandl2dfec552010-07-30 08:43:32 +0000981 return
982 if lineno <= self.curframe.f_lineno:
Georg Brandl0d089622010-07-30 16:00:46 +0000983 self.error('"until" line number is smaller than current '
984 'line number')
Georg Brandl2dfec552010-07-30 08:43:32 +0000985 return
986 else:
987 lineno = None
988 self.set_until(self.curframe, lineno)
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000989 return 1
990 do_unt = do_until
991
Tim Peters2344fae2001-01-15 00:50:52 +0000992 def do_step(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000993 """s(tep)
994 Execute the current line, stop at the first possible occasion
995 (either in a function that is called or in the current
996 function).
997 """
Tim Peters2344fae2001-01-15 00:50:52 +0000998 self.set_step()
999 return 1
1000 do_s = do_step
1001
1002 def do_next(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001003 """n(ext)
1004 Continue execution until the next line in the current function
1005 is reached or it returns.
1006 """
Tim Peters2344fae2001-01-15 00:50:52 +00001007 self.set_next(self.curframe)
1008 return 1
1009 do_n = do_next
1010
Guido van Rossumd8faa362007-04-27 19:54:29 +00001011 def do_run(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001012 """run [args...]
1013 Restart the debugged python program. If a string is supplied
Ezio Melotti30b9d5d2013-08-17 15:50:46 +03001014 it is split with "shlex", and the result is used as the new
Georg Brandl0d089622010-07-30 16:00:46 +00001015 sys.argv. History, breakpoints, actions and debugger options
1016 are preserved. "restart" is an alias for "run".
1017 """
Guido van Rossumd8faa362007-04-27 19:54:29 +00001018 if arg:
1019 import shlex
1020 argv0 = sys.argv[0:1]
1021 sys.argv = shlex.split(arg)
1022 sys.argv[:0] = argv0
Georg Brandl0d089622010-07-30 16:00:46 +00001023 # this is caught in the main debugger loop
Guido van Rossumd8faa362007-04-27 19:54:29 +00001024 raise Restart
1025
1026 do_restart = do_run
1027
Tim Peters2344fae2001-01-15 00:50:52 +00001028 def do_return(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001029 """r(eturn)
1030 Continue execution until the current function returns.
1031 """
Tim Peters2344fae2001-01-15 00:50:52 +00001032 self.set_return(self.curframe)
1033 return 1
1034 do_r = do_return
1035
1036 def do_continue(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001037 """c(ont(inue))
1038 Continue execution, only stop when a breakpoint is encountered.
1039 """
Georg Brandl44f2b642010-12-04 16:00:47 +00001040 if not self.nosigint:
Andrew Svetlov539ee5d2012-12-04 21:08:28 +02001041 try:
1042 self._previous_sigint_handler = \
1043 signal.signal(signal.SIGINT, self.sigint_handler)
1044 except ValueError:
1045 # ValueError happens when do_continue() is invoked from
1046 # a non-main thread in which case we just continue without
1047 # SIGINT set. Would printing a message here (once) make
1048 # sense?
1049 pass
Tim Peters2344fae2001-01-15 00:50:52 +00001050 self.set_continue()
1051 return 1
1052 do_c = do_cont = do_continue
1053
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001054 def do_jump(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001055 """j(ump) lineno
1056 Set the next line that will be executed. Only available in
1057 the bottom-most frame. This lets you jump back and execute
1058 code again, or jump forward to skip code that you don't want
1059 to run.
1060
1061 It should be noted that not all jumps are allowed -- for
1062 instance it is not possible to jump into the middle of a
1063 for loop or out of a finally clause.
1064 """
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001065 if self.curindex + 1 != len(self.stack):
Georg Brandl0d089622010-07-30 16:00:46 +00001066 self.error('You can only jump within the bottom frame')
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001067 return
1068 try:
1069 arg = int(arg)
1070 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +00001071 self.error("The 'jump' command requires a line number")
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001072 else:
1073 try:
1074 # Do the jump, fix up our copy of the stack, and display the
1075 # new position
1076 self.curframe.f_lineno = arg
1077 self.stack[self.curindex] = self.stack[self.curindex][0], arg
1078 self.print_stack_entry(self.stack[self.curindex])
Guido van Rossumb940e112007-01-10 16:19:56 +00001079 except ValueError as e:
Georg Brandl0d089622010-07-30 16:00:46 +00001080 self.error('Jump failed: %s' % e)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001081 do_j = do_jump
1082
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001083 def do_debug(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001084 """debug code
1085 Enter a recursive debugger that steps through the code
1086 argument (which is an arbitrary expression or statement to be
1087 executed in the current environment).
1088 """
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001089 sys.settrace(None)
1090 globals = self.curframe.f_globals
Benjamin Petersond23f8222009-04-05 19:13:16 +00001091 locals = self.curframe_locals
Guido van Rossum7736b5b2008-01-15 21:44:53 +00001092 p = Pdb(self.completekey, self.stdin, self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +00001093 p.prompt = "(%s) " % self.prompt.strip()
Georg Brandl0d089622010-07-30 16:00:46 +00001094 self.message("ENTERING RECURSIVE DEBUGGER")
Guido van Rossumed538d82003-04-09 19:36:34 +00001095 sys.call_tracing(p.run, (arg, globals, locals))
Georg Brandl0d089622010-07-30 16:00:46 +00001096 self.message("LEAVING RECURSIVE DEBUGGER")
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001097 sys.settrace(self.trace_dispatch)
1098 self.lastcmd = p.lastcmd
1099
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001100 complete_debug = _complete_expression
1101
Tim Peters2344fae2001-01-15 00:50:52 +00001102 def do_quit(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001103 """q(uit)\nexit
1104 Quit from the debugger. The program being executed is aborted.
1105 """
Georg Brandlac9a2bb2010-11-29 20:19:15 +00001106 self._user_requested_quit = True
Tim Peters2344fae2001-01-15 00:50:52 +00001107 self.set_quit()
1108 return 1
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001109
Tim Peters2344fae2001-01-15 00:50:52 +00001110 do_q = do_quit
Guido van Rossumd1c08f32002-04-15 00:48:24 +00001111 do_exit = do_quit
Tim Peters2344fae2001-01-15 00:50:52 +00001112
Guido van Rossumeef26072003-01-13 21:13:55 +00001113 def do_EOF(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001114 """EOF
1115 Handles the receipt of EOF as a command.
1116 """
1117 self.message('')
Georg Brandlac9a2bb2010-11-29 20:19:15 +00001118 self._user_requested_quit = True
Guido van Rossumeef26072003-01-13 21:13:55 +00001119 self.set_quit()
1120 return 1
1121
Tim Peters2344fae2001-01-15 00:50:52 +00001122 def do_args(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001123 """a(rgs)
1124 Print the argument list of the current function.
1125 """
Benjamin Petersond23f8222009-04-05 19:13:16 +00001126 co = self.curframe.f_code
1127 dict = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +00001128 n = co.co_argcount
1129 if co.co_flags & 4: n = n+1
1130 if co.co_flags & 8: n = n+1
1131 for i in range(n):
1132 name = co.co_varnames[i]
Georg Brandl0d089622010-07-30 16:00:46 +00001133 if name in dict:
1134 self.message('%s = %r' % (name, dict[name]))
1135 else:
1136 self.message('%s = *** undefined ***' % (name,))
Tim Peters2344fae2001-01-15 00:50:52 +00001137 do_a = do_args
Guido van Rossum2424f851998-09-11 22:50:09 +00001138
Tim Peters2344fae2001-01-15 00:50:52 +00001139 def do_retval(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001140 """retval
1141 Print the return value for the last return of a function.
1142 """
Benjamin Petersond23f8222009-04-05 19:13:16 +00001143 if '__return__' in self.curframe_locals:
Georg Brandl0d089622010-07-30 16:00:46 +00001144 self.message(repr(self.curframe_locals['__return__']))
Tim Peters2344fae2001-01-15 00:50:52 +00001145 else:
Georg Brandl0d089622010-07-30 16:00:46 +00001146 self.error('Not yet returned!')
Tim Peters2344fae2001-01-15 00:50:52 +00001147 do_rv = do_retval
Guido van Rossum2424f851998-09-11 22:50:09 +00001148
Barry Warsaw210bd202002-11-05 22:40:20 +00001149 def _getval(self, arg):
Tim Peters2344fae2001-01-15 00:50:52 +00001150 try:
Benjamin Petersond23f8222009-04-05 19:13:16 +00001151 return eval(arg, self.curframe.f_globals, self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +00001152 except:
Georg Brandl0d089622010-07-30 16:00:46 +00001153 exc_info = sys.exc_info()[:2]
1154 self.error(traceback.format_exception_only(*exc_info)[-1].strip())
Barry Warsaw210bd202002-11-05 22:40:20 +00001155 raise
Guido van Rossum2424f851998-09-11 22:50:09 +00001156
Georg Brandlcbc79c72010-12-04 16:21:42 +00001157 def _getval_except(self, arg, frame=None):
1158 try:
1159 if frame is None:
1160 return eval(arg, self.curframe.f_globals, self.curframe_locals)
1161 else:
1162 return eval(arg, frame.f_globals, frame.f_locals)
1163 except:
1164 exc_info = sys.exc_info()[:2]
1165 err = traceback.format_exception_only(*exc_info)[-1].strip()
1166 return _rstr('** raised %s **' % err)
1167
Barry Warsaw210bd202002-11-05 22:40:20 +00001168 def do_p(self, arg):
R David Murray78d692f2013-10-10 17:23:26 -04001169 """p expression
Georg Brandl0d089622010-07-30 16:00:46 +00001170 Print the value of the expression.
1171 """
Barry Warsaw210bd202002-11-05 22:40:20 +00001172 try:
Georg Brandl0d089622010-07-30 16:00:46 +00001173 self.message(repr(self._getval(arg)))
Barry Warsaw210bd202002-11-05 22:40:20 +00001174 except:
1175 pass
1176
1177 def do_pp(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001178 """pp expression
1179 Pretty-print the value of the expression.
1180 """
Barry Warsaw210bd202002-11-05 22:40:20 +00001181 try:
Georg Brandl0d089622010-07-30 16:00:46 +00001182 self.message(pprint.pformat(self._getval(arg)))
Barry Warsaw210bd202002-11-05 22:40:20 +00001183 except:
1184 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001185
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001186 complete_print = _complete_expression
1187 complete_p = _complete_expression
1188 complete_pp = _complete_expression
1189
Tim Peters2344fae2001-01-15 00:50:52 +00001190 def do_list(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001191 """l(ist) [first [,last] | .]
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001192
1193 List source code for the current file. Without arguments,
1194 list 11 lines around the current line or continue the previous
1195 listing. With . as argument, list 11 lines around the current
1196 line. With one argument, list 11 lines starting at that line.
1197 With two arguments, list the given range; if the second
1198 argument is less than the first, it is a count.
1199
1200 The current line in the current frame is indicated by "->".
1201 If an exception is being debugged, the line where the
1202 exception was originally raised or propagated is indicated by
1203 ">>", if it differs from the current line.
Georg Brandl0d089622010-07-30 16:00:46 +00001204 """
Tim Peters2344fae2001-01-15 00:50:52 +00001205 self.lastcmd = 'list'
1206 last = None
Georg Brandla91a94b2010-07-30 07:14:01 +00001207 if arg and arg != '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001208 try:
Georg Brandl0d089622010-07-30 16:00:46 +00001209 if ',' in arg:
1210 first, last = arg.split(',')
1211 first = int(first.strip())
1212 last = int(last.strip())
Tim Peters2344fae2001-01-15 00:50:52 +00001213 if last < first:
Georg Brandl0d089622010-07-30 16:00:46 +00001214 # assume it's a count
Tim Peters2344fae2001-01-15 00:50:52 +00001215 last = first + last
1216 else:
Georg Brandl0d089622010-07-30 16:00:46 +00001217 first = int(arg.strip())
1218 first = max(1, first - 5)
1219 except ValueError:
1220 self.error('Error in argument: %r' % arg)
Tim Peters2344fae2001-01-15 00:50:52 +00001221 return
Georg Brandla91a94b2010-07-30 07:14:01 +00001222 elif self.lineno is None or arg == '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001223 first = max(1, self.curframe.f_lineno - 5)
1224 else:
1225 first = self.lineno + 1
1226 if last is None:
1227 last = first + 10
1228 filename = self.curframe.f_code.co_filename
1229 breaklist = self.get_file_breaks(filename)
1230 try:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001231 lines = linecache.getlines(filename, self.curframe.f_globals)
1232 self._print_lines(lines[first-1:last], first, breaklist,
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001233 self.curframe)
Georg Brandle59ca2a2010-07-30 17:04:28 +00001234 self.lineno = min(last, len(lines))
1235 if len(lines) < last:
1236 self.message('[EOF]')
Tim Peters2344fae2001-01-15 00:50:52 +00001237 except KeyboardInterrupt:
1238 pass
1239 do_l = do_list
Guido van Rossum2424f851998-09-11 22:50:09 +00001240
Georg Brandle59ca2a2010-07-30 17:04:28 +00001241 def do_longlist(self, arg):
1242 """longlist | ll
1243 List the whole source code for the current function or frame.
1244 """
1245 filename = self.curframe.f_code.co_filename
1246 breaklist = self.get_file_breaks(filename)
1247 try:
Georg Brandl5ed2b5a2010-07-30 18:08:12 +00001248 lines, lineno = getsourcelines(self.curframe)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +02001249 except OSError as err:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001250 self.error(err)
1251 return
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001252 self._print_lines(lines, lineno, breaklist, self.curframe)
Georg Brandle59ca2a2010-07-30 17:04:28 +00001253 do_ll = do_longlist
1254
1255 def do_source(self, arg):
1256 """source expression
1257 Try to get source code for the given object and display it.
1258 """
1259 try:
1260 obj = self._getval(arg)
1261 except:
1262 return
1263 try:
Georg Brandl5ed2b5a2010-07-30 18:08:12 +00001264 lines, lineno = getsourcelines(obj)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +02001265 except (OSError, TypeError) as err:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001266 self.error(err)
1267 return
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001268 self._print_lines(lines, lineno)
Georg Brandle59ca2a2010-07-30 17:04:28 +00001269
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001270 complete_source = _complete_expression
1271
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001272 def _print_lines(self, lines, start, breaks=(), frame=None):
Georg Brandle59ca2a2010-07-30 17:04:28 +00001273 """Print a range of lines."""
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001274 if frame:
1275 current_lineno = frame.f_lineno
1276 exc_lineno = self.tb_lineno.get(frame, -1)
1277 else:
1278 current_lineno = exc_lineno = -1
Georg Brandle59ca2a2010-07-30 17:04:28 +00001279 for lineno, line in enumerate(lines, start):
1280 s = str(lineno).rjust(3)
1281 if len(s) < 4:
1282 s += ' '
1283 if lineno in breaks:
1284 s += 'B'
1285 else:
1286 s += ' '
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001287 if lineno == current_lineno:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001288 s += '->'
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001289 elif lineno == exc_lineno:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001290 s += '>>'
1291 self.message(s + '\t' + line.rstrip())
1292
Tim Peters2344fae2001-01-15 00:50:52 +00001293 def do_whatis(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001294 """whatis arg
1295 Print the type of the argument.
1296 """
Tim Peters2344fae2001-01-15 00:50:52 +00001297 try:
Georg Brandl0d089622010-07-30 16:00:46 +00001298 value = self._getval(arg)
Tim Peters2344fae2001-01-15 00:50:52 +00001299 except:
Georg Brandl0d089622010-07-30 16:00:46 +00001300 # _getval() already printed the error
Tim Peters2344fae2001-01-15 00:50:52 +00001301 return
1302 code = None
1303 # Is it a function?
Georg Brandl0d089622010-07-30 16:00:46 +00001304 try:
1305 code = value.__code__
1306 except Exception:
1307 pass
Tim Peters2344fae2001-01-15 00:50:52 +00001308 if code:
Georg Brandl0d089622010-07-30 16:00:46 +00001309 self.message('Function %s' % code.co_name)
Tim Peters2344fae2001-01-15 00:50:52 +00001310 return
1311 # Is it an instance method?
Georg Brandl0d089622010-07-30 16:00:46 +00001312 try:
1313 code = value.__func__.__code__
1314 except Exception:
1315 pass
Tim Peters2344fae2001-01-15 00:50:52 +00001316 if code:
Georg Brandl0d089622010-07-30 16:00:46 +00001317 self.message('Method %s' % code.co_name)
1318 return
1319 # Is it a class?
1320 if value.__class__ is type:
Serhiy Storchaka521e5862014-07-22 15:00:37 +03001321 self.message('Class %s.%s' % (value.__module__, value.__qualname__))
Tim Peters2344fae2001-01-15 00:50:52 +00001322 return
1323 # None of the above...
Georg Brandl0d089622010-07-30 16:00:46 +00001324 self.message(type(value))
Guido van Rossum8e2ec561993-07-29 09:37:38 +00001325
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001326 complete_whatis = _complete_expression
1327
Georg Brandlcbc79c72010-12-04 16:21:42 +00001328 def do_display(self, arg):
1329 """display [expression]
1330
1331 Display the value of the expression if it changed, each time execution
1332 stops in the current frame.
1333
1334 Without expression, list all display expressions for the current frame.
1335 """
1336 if not arg:
1337 self.message('Currently displaying:')
1338 for item in self.displaying.get(self.curframe, {}).items():
1339 self.message('%s: %r' % item)
1340 else:
1341 val = self._getval_except(arg)
1342 self.displaying.setdefault(self.curframe, {})[arg] = val
1343 self.message('display %s: %r' % (arg, val))
1344
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001345 complete_display = _complete_expression
1346
Georg Brandlcbc79c72010-12-04 16:21:42 +00001347 def do_undisplay(self, arg):
1348 """undisplay [expression]
1349
1350 Do not display the expression any more in the current frame.
1351
1352 Without expression, clear all display expressions for the current frame.
1353 """
1354 if arg:
1355 try:
1356 del self.displaying.get(self.curframe, {})[arg]
1357 except KeyError:
1358 self.error('not displaying %s' % arg)
1359 else:
1360 self.displaying.pop(self.curframe, None)
1361
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001362 def complete_undisplay(self, text, line, begidx, endidx):
1363 return [e for e in self.displaying.get(self.curframe, {})
1364 if e.startswith(text)]
1365
Georg Brandl1acb7462010-12-04 11:20:26 +00001366 def do_interact(self, arg):
1367 """interact
1368
Ezio Melotti30b9d5d2013-08-17 15:50:46 +03001369 Start an interactive interpreter whose global namespace
Georg Brandl1acb7462010-12-04 11:20:26 +00001370 contains all the (global and local) names found in the current scope.
1371 """
1372 ns = self.curframe.f_globals.copy()
1373 ns.update(self.curframe_locals)
1374 code.interact("*interactive*", local=ns)
1375
Tim Peters2344fae2001-01-15 00:50:52 +00001376 def do_alias(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001377 """alias [name [command [parameter parameter ...] ]]
1378 Create an alias called 'name' that executes 'command'. The
1379 command must *not* be enclosed in quotes. Replaceable
1380 parameters can be indicated by %1, %2, and so on, while %* is
1381 replaced by all the parameters. If no command is given, the
1382 current alias for name is shown. If no name is given, all
1383 aliases are listed.
1384
1385 Aliases may be nested and can contain anything that can be
1386 legally typed at the pdb prompt. Note! You *can* override
1387 internal pdb commands with aliases! Those internal commands
1388 are then hidden until the alias is removed. Aliasing is
1389 recursively applied to the first word of the command line; all
1390 other words in the line are left alone.
1391
1392 As an example, here are two useful aliases (especially when
1393 placed in the .pdbrc file):
1394
1395 # Print instance variables (usage "pi classInst")
R David Murray78d692f2013-10-10 17:23:26 -04001396 alias pi for k in %1.__dict__.keys(): print("%1.",k,"=",%1.__dict__[k])
Georg Brandl0d089622010-07-30 16:00:46 +00001397 # Print instance variables in self
1398 alias ps pi self
1399 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001400 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001401 if len(args) == 0:
Benjamin Petersonbe74a372009-09-11 21:17:13 +00001402 keys = sorted(self.aliases.keys())
Tim Peters2344fae2001-01-15 00:50:52 +00001403 for alias in keys:
Georg Brandl0d089622010-07-30 16:00:46 +00001404 self.message("%s = %s" % (alias, self.aliases[alias]))
Tim Peters2344fae2001-01-15 00:50:52 +00001405 return
Guido van Rossum08454592002-07-12 13:10:53 +00001406 if args[0] in self.aliases and len(args) == 1:
Georg Brandl0d089622010-07-30 16:00:46 +00001407 self.message("%s = %s" % (args[0], self.aliases[args[0]]))
Tim Peters2344fae2001-01-15 00:50:52 +00001408 else:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001409 self.aliases[args[0]] = ' '.join(args[1:])
Guido van Rossum23efba41992-01-27 16:58:47 +00001410
Tim Peters2344fae2001-01-15 00:50:52 +00001411 def do_unalias(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001412 """unalias name
1413 Delete the specified alias.
1414 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001415 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001416 if len(args) == 0: return
Raymond Hettinger54f02222002-06-01 14:18:47 +00001417 if args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +00001418 del self.aliases[args[0]]
Guido van Rossum00230781993-03-29 11:39:45 +00001419
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001420 def complete_unalias(self, text, line, begidx, endidx):
1421 return [a for a in self.aliases if a.startswith(text)]
1422
Georg Brandl0d089622010-07-30 16:00:46 +00001423 # List of all the commands making the program resume execution.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001424 commands_resuming = ['do_continue', 'do_step', 'do_next', 'do_return',
1425 'do_quit', 'do_jump']
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001426
Tim Peters2344fae2001-01-15 00:50:52 +00001427 # Print a traceback starting at the top stack frame.
1428 # The most recently entered frame is printed last;
1429 # this is different from dbx and gdb, but consistent with
1430 # the Python interpreter's stack trace.
1431 # It is also consistent with the up/down commands (which are
1432 # compatible with dbx and gdb: up moves towards 'main()'
1433 # and down moves towards the most recent stack frame).
Guido van Rossum2424f851998-09-11 22:50:09 +00001434
Tim Peters2344fae2001-01-15 00:50:52 +00001435 def print_stack_trace(self):
1436 try:
1437 for frame_lineno in self.stack:
1438 self.print_stack_entry(frame_lineno)
1439 except KeyboardInterrupt:
1440 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001441
Tim Peters2344fae2001-01-15 00:50:52 +00001442 def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix):
1443 frame, lineno = frame_lineno
1444 if frame is self.curframe:
Georg Brandl0d089622010-07-30 16:00:46 +00001445 prefix = '> '
Tim Peters2344fae2001-01-15 00:50:52 +00001446 else:
Georg Brandl0d089622010-07-30 16:00:46 +00001447 prefix = ' '
1448 self.message(prefix +
1449 self.format_stack_entry(frame_lineno, prompt_prefix))
Guido van Rossum2424f851998-09-11 22:50:09 +00001450
Georg Brandl0d089622010-07-30 16:00:46 +00001451 # Provide help
Guido van Rossum921c8241992-01-10 14:54:42 +00001452
Georg Brandl0d089622010-07-30 16:00:46 +00001453 def do_help(self, arg):
1454 """h(elp)
1455 Without argument, print the list of available commands.
1456 With a command name as argument, print help about that command.
1457 "help pdb" shows the full pdb documentation.
1458 "help exec" gives help on the ! command.
1459 """
1460 if not arg:
1461 return cmd.Cmd.do_help(self, arg)
1462 try:
1463 try:
1464 topic = getattr(self, 'help_' + arg)
1465 return topic()
1466 except AttributeError:
1467 command = getattr(self, 'do_' + arg)
1468 except AttributeError:
1469 self.error('No help for %r' % arg)
1470 else:
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001471 if sys.flags.optimize >= 2:
1472 self.error('No help for %r; please do not run Python with -OO '
1473 'if you need command help' % arg)
1474 return
Georg Brandl0d089622010-07-30 16:00:46 +00001475 self.message(command.__doc__.rstrip())
Guido van Rossum921c8241992-01-10 14:54:42 +00001476
Georg Brandl0d089622010-07-30 16:00:46 +00001477 do_h = do_help
Barry Warsaw210bd202002-11-05 22:40:20 +00001478
Tim Peters2344fae2001-01-15 00:50:52 +00001479 def help_exec(self):
Georg Brandl0d089622010-07-30 16:00:46 +00001480 """(!) statement
1481 Execute the (one-line) statement in the context of the current
1482 stack frame. The exclamation point can be omitted unless the
1483 first word of the statement resembles a debugger command. To
1484 assign to a global variable you must always prefix the command
1485 with a 'global' command, e.g.:
1486 (Pdb) global list_options; list_options = ['-l']
1487 (Pdb)
1488 """
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001489 self.message((self.help_exec.__doc__ or '').strip())
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001490
Tim Peters2344fae2001-01-15 00:50:52 +00001491 def help_pdb(self):
1492 help()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001493
Georg Brandl0d089622010-07-30 16:00:46 +00001494 # other helper functions
1495
Tim Peters2344fae2001-01-15 00:50:52 +00001496 def lookupmodule(self, filename):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001497 """Helper function for break/clear parsing -- may be overridden.
1498
1499 lookupmodule() translates (possibly incomplete) file or module name
1500 into an absolute file name.
1501 """
1502 if os.path.isabs(filename) and os.path.exists(filename):
Tim Peterse718f612004-10-12 21:51:32 +00001503 return filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001504 f = os.path.join(sys.path[0], filename)
1505 if os.path.exists(f) and self.canonic(f) == self.mainpyfile:
1506 return f
Tim Peters2344fae2001-01-15 00:50:52 +00001507 root, ext = os.path.splitext(filename)
1508 if ext == '':
1509 filename = filename + '.py'
1510 if os.path.isabs(filename):
1511 return filename
1512 for dirname in sys.path:
1513 while os.path.islink(dirname):
1514 dirname = os.readlink(dirname)
1515 fullname = os.path.join(dirname, filename)
1516 if os.path.exists(fullname):
1517 return fullname
1518 return None
Guido van Rossumb5699c71998-07-20 23:13:54 +00001519
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001520 def _runscript(self, filename):
Guido van Rossumd8faa362007-04-27 19:54:29 +00001521 # The script has to run in __main__ namespace (or imports from
1522 # __main__ will break).
1523 #
1524 # So we clear up the __main__ and set several special variables
1525 # (this gets rid of pdb's globals and cleans old variables on restarts).
1526 import __main__
1527 __main__.__dict__.clear()
1528 __main__.__dict__.update({"__name__" : "__main__",
1529 "__file__" : filename,
1530 "__builtins__": __builtins__,
1531 })
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001532
1533 # When bdb sets tracing, a number of call and line events happens
1534 # BEFORE debugger even reaches user's code (and the exact sequence of
1535 # events depends on python version). So we take special measures to
1536 # avoid stopping before we reach the main script (see user_line and
1537 # user_call for details).
Georg Brandlac9a2bb2010-11-29 20:19:15 +00001538 self._wait_for_mainpyfile = True
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001539 self.mainpyfile = self.canonic(filename)
Georg Brandlac9a2bb2010-11-29 20:19:15 +00001540 self._user_requested_quit = False
Georg Brandld07ac642009-08-13 07:50:57 +00001541 with open(filename, "rb") as fp:
1542 statement = "exec(compile(%r, %r, 'exec'))" % \
1543 (fp.read(), self.mainpyfile)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001544 self.run(statement)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001545
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001546# Collect all command help into docstring, if not run with -OO
Georg Brandl0d089622010-07-30 16:00:46 +00001547
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001548if __doc__ is not None:
1549 # unfortunately we can't guess this order from the class definition
1550 _help_order = [
1551 'help', 'where', 'down', 'up', 'break', 'tbreak', 'clear', 'disable',
1552 'enable', 'ignore', 'condition', 'commands', 'step', 'next', 'until',
1553 'jump', 'return', 'retval', 'run', 'continue', 'list', 'longlist',
R David Murray78d692f2013-10-10 17:23:26 -04001554 'args', 'p', 'pp', 'whatis', 'source', 'display', 'undisplay',
Georg Brandlcbc79c72010-12-04 16:21:42 +00001555 'interact', 'alias', 'unalias', 'debug', 'quit',
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001556 ]
Georg Brandl0d089622010-07-30 16:00:46 +00001557
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001558 for _command in _help_order:
1559 __doc__ += getattr(Pdb, 'do_' + _command).__doc__.strip() + '\n\n'
1560 __doc__ += Pdb.help_exec.__doc__
Georg Brandl0d089622010-07-30 16:00:46 +00001561
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001562 del _help_order, _command
1563
Georg Brandl0d089622010-07-30 16:00:46 +00001564
Guido van Rossum35771131992-09-08 11:59:04 +00001565# Simplified interface
1566
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001567def run(statement, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001568 Pdb().run(statement, globals, locals)
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001569
1570def runeval(expression, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001571 return Pdb().runeval(expression, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001572
1573def runctx(statement, globals, locals):
Tim Peters2344fae2001-01-15 00:50:52 +00001574 # B/W compatibility
1575 run(statement, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001576
Raymond Hettinger2ef7e6c2004-10-24 00:32:24 +00001577def runcall(*args, **kwds):
1578 return Pdb().runcall(*args, **kwds)
Guido van Rossum4e160981992-09-02 20:43:20 +00001579
Guido van Rossumb6775db1994-08-01 11:34:53 +00001580def set_trace():
Johannes Gijsbers84a6c202004-11-07 11:35:30 +00001581 Pdb().set_trace(sys._getframe().f_back)
Guido van Rossum35771131992-09-08 11:59:04 +00001582
1583# Post-Mortem interface
1584
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001585def post_mortem(t=None):
1586 # handling the default
1587 if t is None:
1588 # sys.exc_info() returns (type, value, traceback) if an exception is
1589 # being handled, otherwise it returns None
1590 t = sys.exc_info()[2]
Georg Brandl0d089622010-07-30 16:00:46 +00001591 if t is None:
1592 raise ValueError("A valid traceback must be passed if no "
1593 "exception is being handled")
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001594
Tim Peters2344fae2001-01-15 00:50:52 +00001595 p = Pdb()
1596 p.reset()
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001597 p.interaction(None, t)
Guido van Rossum35771131992-09-08 11:59:04 +00001598
1599def pm():
Tim Peters2344fae2001-01-15 00:50:52 +00001600 post_mortem(sys.last_traceback)
Guido van Rossum35771131992-09-08 11:59:04 +00001601
1602
1603# Main program for testing
1604
Guido van Rossum23efba41992-01-27 16:58:47 +00001605TESTCMD = 'import x; x.main()'
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001606
Guido van Rossum921c8241992-01-10 14:54:42 +00001607def test():
Tim Peters2344fae2001-01-15 00:50:52 +00001608 run(TESTCMD)
Guido van Rossume61fa0a1993-10-22 13:56:35 +00001609
1610# print help
1611def help():
Georg Brandl02053ee2010-07-18 10:11:03 +00001612 import pydoc
1613 pydoc.pager(__doc__)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001614
Georg Brandle0230912010-07-30 08:29:39 +00001615_usage = """\
1616usage: pdb.py [-c command] ... pyfile [arg] ...
1617
1618Debug the Python program given by pyfile.
1619
1620Initial commands are read from .pdbrc files in your home directory
1621and in the current directory, if they exist. Commands supplied with
1622-c are executed after commands from .pdbrc files.
1623
1624To let the script run until an exception occurs, use "-c continue".
Georg Brandl2dfec552010-07-30 08:43:32 +00001625To let the script run up to a given line X in the debugged file, use
1626"-c 'until X'"."""
Georg Brandle0230912010-07-30 08:29:39 +00001627
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001628def main():
Georg Brandle0230912010-07-30 08:29:39 +00001629 import getopt
1630
1631 opts, args = getopt.getopt(sys.argv[1:], 'hc:', ['--help', '--command='])
1632
1633 if not args:
1634 print(_usage)
Tim Peters2344fae2001-01-15 00:50:52 +00001635 sys.exit(2)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001636
Georg Brandle0230912010-07-30 08:29:39 +00001637 commands = []
1638 for opt, optarg in opts:
1639 if opt in ['-h', '--help']:
1640 print(_usage)
1641 sys.exit()
1642 elif opt in ['-c', '--command']:
1643 commands.append(optarg)
1644
1645 mainpyfile = args[0] # Get script filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001646 if not os.path.exists(mainpyfile):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001647 print('Error:', mainpyfile, 'does not exist')
Tim Peters2344fae2001-01-15 00:50:52 +00001648 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001649
Georg Brandle0230912010-07-30 08:29:39 +00001650 sys.argv[:] = args # Hide "pdb.py" and pdb options from argument list
Guido van Rossumec577d51996-09-10 17:39:34 +00001651
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001652 # Replace pdb's dir with script's dir in front of module search path.
1653 sys.path[0] = os.path.dirname(mainpyfile)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001654
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001655 # Note on saving/restoring sys.argv: it's a good idea when sys.argv was
1656 # modified by the script being debugged. It's a bad idea when it was
Georg Brandl3078df02009-05-05 09:11:31 +00001657 # changed by the user from the command line. There is a "restart" command
1658 # which allows explicit specification of command line arguments.
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001659 pdb = Pdb()
Georg Brandle0230912010-07-30 08:29:39 +00001660 pdb.rcLines.extend(commands)
Georg Brandl1e30bd32010-07-30 07:21:26 +00001661 while True:
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001662 try:
1663 pdb._runscript(mainpyfile)
1664 if pdb._user_requested_quit:
1665 break
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001666 print("The program finished and will be restarted")
Guido van Rossumd8faa362007-04-27 19:54:29 +00001667 except Restart:
1668 print("Restarting", mainpyfile, "with arguments:")
Georg Brandle0230912010-07-30 08:29:39 +00001669 print("\t" + " ".join(args))
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001670 except SystemExit:
1671 # In most cases SystemExit does not warrant a post-mortem session.
Georg Brandle0230912010-07-30 08:29:39 +00001672 print("The program exited via sys.exit(). Exit status:", end=' ')
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001673 print(sys.exc_info()[1])
Terry Jan Reedyca3f4352015-09-05 19:13:26 -04001674 except SyntaxError:
1675 traceback.print_exc()
1676 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001677 except:
1678 traceback.print_exc()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001679 print("Uncaught exception. Entering post mortem debugging")
1680 print("Running 'cont' or 'step' will restart the program")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001681 t = sys.exc_info()[2]
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001682 pdb.interaction(None, t)
Georg Brandl3078df02009-05-05 09:11:31 +00001683 print("Post mortem debugger finished. The " + mainpyfile +
1684 " will be restarted")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001685
1686
1687# When invoked as main program, invoke the debugger on a script
Guido van Rossumd8faa362007-04-27 19:54:29 +00001688if __name__ == '__main__':
1689 import pdb
1690 pdb.main()