blob: b11ac0abd1682e3833fca0f489486e6595a2c1fa [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
Martin Pantere26da7c2016-06-02 10:07:09 +000055defined there can be overridden by the local file.
Georg Brandl02053ee2010-07-18 10:11:03 +000056
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
Georg Brandl44f2b642010-12-04 16:00:47 +000069import os
70import re
Guido van Rossum921c8241992-01-10 14:54:42 +000071import sys
Guido van Rossum23efba41992-01-27 16:58:47 +000072import cmd
73import bdb
Georg Brandl0a9c3e92010-07-30 18:46:38 +000074import dis
Georg Brandl1acb7462010-12-04 11:20:26 +000075import code
Georg Brandl4c7c3c52012-03-10 22:36:48 +010076import glob
Barry Warsaw210bd202002-11-05 22:40:20 +000077import pprint
Georg Brandl44f2b642010-12-04 16:00:47 +000078import signal
Georg Brandle59ca2a2010-07-30 17:04:28 +000079import inspect
Georg Brandl1acb7462010-12-04 11:20:26 +000080import traceback
81import linecache
Guido van Rossumd8faa362007-04-27 19:54:29 +000082
83
84class Restart(Exception):
85 """Causes a debugger to be restarted for the debugged python program."""
86 pass
87
Skip Montanaro352674d2001-02-07 23:14:30 +000088__all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace",
89 "post_mortem", "help"]
90
Barry Warsaw2bee8fe1999-09-09 16:32:41 +000091def find_function(funcname, filename):
Thomas Wouters89f507f2006-12-13 04:49:30 +000092 cre = re.compile(r'def\s+%s\s*[(]' % re.escape(funcname))
Tim Peters2344fae2001-01-15 00:50:52 +000093 try:
94 fp = open(filename)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +020095 except OSError:
Tim Peters2344fae2001-01-15 00:50:52 +000096 return None
97 # consumer of this info expects the first line to be 1
Georg Brandl6e220552013-10-13 20:51:47 +020098 with fp:
99 for lineno, line in enumerate(fp, start=1):
100 if cre.match(line):
101 return funcname, filename, lineno
102 return None
Guido van Rossum921c8241992-01-10 14:54:42 +0000103
Georg Brandl5ed2b5a2010-07-30 18:08:12 +0000104def getsourcelines(obj):
105 lines, lineno = inspect.findsource(obj)
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000106 if inspect.isframe(obj) and obj.f_globals is obj.f_locals:
Georg Brandl5ed2b5a2010-07-30 18:08:12 +0000107 # must be a module frame: do not try to cut a block out of it
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000108 return lines, 1
Georg Brandl5ed2b5a2010-07-30 18:08:12 +0000109 elif inspect.ismodule(obj):
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000110 return lines, 1
Georg Brandl5ed2b5a2010-07-30 18:08:12 +0000111 return inspect.getblock(lines[lineno:]), lineno+1
Guido van Rossum921c8241992-01-10 14:54:42 +0000112
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000113def lasti2lineno(code, lasti):
114 linestarts = list(dis.findlinestarts(code))
115 linestarts.reverse()
116 for i, lineno in linestarts:
117 if lasti >= i:
118 return lineno
119 return 0
120
121
Georg Brandlcbc79c72010-12-04 16:21:42 +0000122class _rstr(str):
123 """String that doesn't quote its repr."""
124 def __repr__(self):
125 return self
126
127
Guido van Rossuma558e371994-11-10 22:27:35 +0000128# Interaction prompt line will separate file and call info from code
129# text using value of line_prefix string. A newline and arrow may
130# be to your liking. You can set it once pdb is imported using the
131# command "pdb.line_prefix = '\n% '".
Tim Peters2344fae2001-01-15 00:50:52 +0000132# line_prefix = ': ' # Use this to get the old situation back
133line_prefix = '\n-> ' # Probably a better default
Guido van Rossuma558e371994-11-10 22:27:35 +0000134
Guido van Rossum23efba41992-01-27 16:58:47 +0000135class Pdb(bdb.Bdb, cmd.Cmd):
Guido van Rossum2424f851998-09-11 22:50:09 +0000136
Georg Brandl44f2b642010-12-04 16:00:47 +0000137 def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None,
138 nosigint=False):
Georg Brandl243ad662009-05-05 09:00:19 +0000139 bdb.Bdb.__init__(self, skip=skip)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000140 cmd.Cmd.__init__(self, completekey, stdin, stdout)
141 if stdout:
142 self.use_rawinput = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000143 self.prompt = '(Pdb) '
144 self.aliases = {}
Georg Brandlcbc79c72010-12-04 16:21:42 +0000145 self.displaying = {}
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000146 self.mainpyfile = ''
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000147 self._wait_for_mainpyfile = False
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000148 self.tb_lineno = {}
Tim Peters2344fae2001-01-15 00:50:52 +0000149 # Try to load readline if it exists
150 try:
151 import readline
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100152 # remove some common file name delimiters
153 readline.set_completer_delims(' \t\n`@#$%^&*()=+[{]}\\|;:\'",<>?')
Brett Cannoncd171c82013-07-04 17:43:24 -0400154 except ImportError:
Tim Peters2344fae2001-01-15 00:50:52 +0000155 pass
Georg Brandl44f2b642010-12-04 16:00:47 +0000156 self.allow_kbdint = False
157 self.nosigint = nosigint
Guido van Rossum2424f851998-09-11 22:50:09 +0000158
Tim Peters2344fae2001-01-15 00:50:52 +0000159 # Read $HOME/.pdbrc and ./.pdbrc
160 self.rcLines = []
Raymond Hettinger54f02222002-06-01 14:18:47 +0000161 if 'HOME' in os.environ:
Tim Peters2344fae2001-01-15 00:50:52 +0000162 envHome = os.environ['HOME']
163 try:
Florent Xicluna7dde7922010-09-03 19:52:03 +0000164 with open(os.path.join(envHome, ".pdbrc")) as rcFile:
165 self.rcLines.extend(rcFile)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200166 except OSError:
Tim Peters2344fae2001-01-15 00:50:52 +0000167 pass
Tim Peters2344fae2001-01-15 00:50:52 +0000168 try:
Florent Xicluna7dde7922010-09-03 19:52:03 +0000169 with open(".pdbrc") as rcFile:
170 self.rcLines.extend(rcFile)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200171 except OSError:
Tim Peters2344fae2001-01-15 00:50:52 +0000172 pass
Guido van Rossum23efba41992-01-27 16:58:47 +0000173
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000174 self.commands = {} # associates a command list to breakpoint numbers
Benjamin Petersond23f8222009-04-05 19:13:16 +0000175 self.commands_doprompt = {} # for each bp num, tells if the prompt
176 # must be disp. after execing the cmd list
177 self.commands_silent = {} # for each bp num, tells if the stack trace
178 # must be disp. after execing the cmd list
179 self.commands_defining = False # True while in the process of defining
180 # a command list
181 self.commands_bnum = None # The breakpoint number for which we are
182 # defining a list
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000183
Georg Brandl44f2b642010-12-04 16:00:47 +0000184 def sigint_handler(self, signum, frame):
185 if self.allow_kbdint:
186 raise KeyboardInterrupt
187 self.message("\nProgram interrupted. (Use 'cont' to resume).")
188 self.set_step()
189 self.set_trace(frame)
190 # restore previous signal handler
191 signal.signal(signal.SIGINT, self._previous_sigint_handler)
192
Tim Peters2344fae2001-01-15 00:50:52 +0000193 def reset(self):
194 bdb.Bdb.reset(self)
195 self.forget()
Guido van Rossum23efba41992-01-27 16:58:47 +0000196
Tim Peters2344fae2001-01-15 00:50:52 +0000197 def forget(self):
198 self.lineno = None
199 self.stack = []
200 self.curindex = 0
201 self.curframe = None
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000202 self.tb_lineno.clear()
Guido van Rossum2424f851998-09-11 22:50:09 +0000203
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000204 def setup(self, f, tb):
Tim Peters2344fae2001-01-15 00:50:52 +0000205 self.forget()
Georg Brandl0a9c3e92010-07-30 18:46:38 +0000206 self.stack, self.curindex = self.get_stack(f, tb)
207 while tb:
208 # when setting up post-mortem debugging with a traceback, save all
209 # the original line numbers to be displayed along the current line
210 # numbers (which can be different, e.g. due to finally clauses)
211 lineno = lasti2lineno(tb.tb_frame.f_code, tb.tb_lasti)
212 self.tb_lineno[tb.tb_frame] = lineno
213 tb = tb.tb_next
Tim Peters2344fae2001-01-15 00:50:52 +0000214 self.curframe = self.stack[self.curindex][0]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000215 # The f_locals dictionary is updated from the actual frame
216 # locals whenever the .f_locals accessor is called, so we
217 # cache it here to ensure that modifications are not overwritten.
218 self.curframe_locals = self.curframe.f_locals
Georg Brandle0230912010-07-30 08:29:39 +0000219 return self.execRcLines()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000220
Tim Peters2344fae2001-01-15 00:50:52 +0000221 # Can be executed earlier than 'setup' if desired
222 def execRcLines(self):
Georg Brandle0230912010-07-30 08:29:39 +0000223 if not self.rcLines:
224 return
225 # local copy because of recursion
226 rcLines = self.rcLines
227 rcLines.reverse()
228 # execute every line only once
229 self.rcLines = []
230 while rcLines:
231 line = rcLines.pop().strip()
232 if line and line[0] != '#':
233 if self.onecmd(line):
234 # if onecmd returns True, the command wants to exit
235 # from the interaction, save leftover rc lines
236 # to execute before next interaction
237 self.rcLines += reversed(rcLines)
238 return True
Guido van Rossum2424f851998-09-11 22:50:09 +0000239
Tim Peters280488b2002-08-23 18:19:30 +0000240 # Override Bdb methods
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000241
242 def user_call(self, frame, argument_list):
243 """This method is called when there is the remote possibility
244 that we ever need to stop in this function."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000245 if self._wait_for_mainpyfile:
246 return
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000247 if self.stop_here(frame):
Georg Brandl0d089622010-07-30 16:00:46 +0000248 self.message('--Call--')
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000249 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000250
Tim Peters2344fae2001-01-15 00:50:52 +0000251 def user_line(self, frame):
252 """This function is called when we stop or break at this line."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000253 if self._wait_for_mainpyfile:
254 if (self.mainpyfile != self.canonic(frame.f_code.co_filename)
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000255 or frame.f_lineno <= 0):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000256 return
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000257 self._wait_for_mainpyfile = False
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000258 if self.bp_commands(frame):
259 self.interaction(frame, None)
260
Georg Brandle0230912010-07-30 08:29:39 +0000261 def bp_commands(self, frame):
Georg Brandl3078df02009-05-05 09:11:31 +0000262 """Call every command that was set for the current active breakpoint
263 (if there is one).
264
265 Returns True if the normal interaction function must be called,
266 False otherwise."""
267 # self.currentbp is set in bdb in Bdb.break_here if a breakpoint was hit
268 if getattr(self, "currentbp", False) and \
269 self.currentbp in self.commands:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000270 currentbp = self.currentbp
271 self.currentbp = 0
272 lastcmd_back = self.lastcmd
273 self.setup(frame, None)
274 for line in self.commands[currentbp]:
275 self.onecmd(line)
276 self.lastcmd = lastcmd_back
277 if not self.commands_silent[currentbp]:
278 self.print_stack_entry(self.stack[self.curindex])
279 if self.commands_doprompt[currentbp]:
Georg Brandl44f2b642010-12-04 16:00:47 +0000280 self._cmdloop()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000281 self.forget()
282 return
283 return 1
Guido van Rossum9e1ee971997-07-11 13:43:53 +0000284
Tim Peters2344fae2001-01-15 00:50:52 +0000285 def user_return(self, frame, return_value):
286 """This function is called when a return trap is set here."""
Georg Brandl34cc0f52010-07-30 09:43:00 +0000287 if self._wait_for_mainpyfile:
288 return
Tim Peters2344fae2001-01-15 00:50:52 +0000289 frame.f_locals['__return__'] = return_value
Georg Brandl0d089622010-07-30 16:00:46 +0000290 self.message('--Return--')
Tim Peters2344fae2001-01-15 00:50:52 +0000291 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000292
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000293 def user_exception(self, frame, exc_info):
Tim Peters2344fae2001-01-15 00:50:52 +0000294 """This function is called if an exception occurs,
295 but only if we are to stop at or just below this level."""
Georg Brandl34cc0f52010-07-30 09:43:00 +0000296 if self._wait_for_mainpyfile:
297 return
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000298 exc_type, exc_value, exc_traceback = exc_info
Tim Peters2344fae2001-01-15 00:50:52 +0000299 frame.f_locals['__exception__'] = exc_type, exc_value
Guido van Rossum8820c232013-11-21 11:30:06 -0800300
301 # An 'Internal StopIteration' exception is an exception debug event
302 # issued by the interpreter when handling a subgenerator run with
Martin Panter46f50722016-05-26 05:35:26 +0000303 # 'yield from' or a generator controlled by a for loop. No exception has
Berker Peksagf23530f2014-10-19 18:04:38 +0300304 # actually occurred in this case. The debugger uses this debug event to
Guido van Rossum8820c232013-11-21 11:30:06 -0800305 # stop when the debuggee is returning from such generators.
306 prefix = 'Internal ' if (not exc_traceback
307 and exc_type is StopIteration) else ''
308 self.message('%s%s' % (prefix,
309 traceback.format_exception_only(exc_type, exc_value)[-1].strip()))
Tim Peters2344fae2001-01-15 00:50:52 +0000310 self.interaction(frame, exc_traceback)
Guido van Rossum2424f851998-09-11 22:50:09 +0000311
Tim Peters2344fae2001-01-15 00:50:52 +0000312 # General interaction function
Georg Brandl44f2b642010-12-04 16:00:47 +0000313 def _cmdloop(self):
314 while True:
315 try:
316 # keyboard interrupts allow for an easy way to cancel
317 # the current command, so allow them during interactive input
318 self.allow_kbdint = True
319 self.cmdloop()
320 self.allow_kbdint = False
321 break
322 except KeyboardInterrupt:
323 self.message('--KeyboardInterrupt--')
Tim Peters2344fae2001-01-15 00:50:52 +0000324
Georg Brandlcbc79c72010-12-04 16:21:42 +0000325 # Called before loop, handles display expressions
326 def preloop(self):
327 displaying = self.displaying.get(self.curframe)
328 if displaying:
329 for expr, oldvalue in displaying.items():
330 newvalue = self._getval_except(expr)
331 # check for identity first; this prevents custom __eq__ to
332 # be called at every loop, and also prevents instances whose
333 # fields are changed to be displayed
334 if newvalue is not oldvalue and newvalue != oldvalue:
335 displaying[expr] = newvalue
336 self.message('display %s: %r [old: %r]' %
337 (expr, newvalue, oldvalue))
338
Tim Peters2344fae2001-01-15 00:50:52 +0000339 def interaction(self, frame, traceback):
Georg Brandle0230912010-07-30 08:29:39 +0000340 if self.setup(frame, traceback):
341 # no interaction desired at this time (happens if .pdbrc contains
342 # a command like "continue")
343 self.forget()
344 return
Tim Peters2344fae2001-01-15 00:50:52 +0000345 self.print_stack_entry(self.stack[self.curindex])
Georg Brandl44f2b642010-12-04 16:00:47 +0000346 self._cmdloop()
Tim Peters2344fae2001-01-15 00:50:52 +0000347 self.forget()
348
Benjamin Petersond23f8222009-04-05 19:13:16 +0000349 def displayhook(self, obj):
350 """Custom displayhook for the exec in default(), which prevents
351 assignment of the _ variable in the builtins.
352 """
Georg Brandl9fa2e022009-09-16 16:40:45 +0000353 # reproduce the behavior of the standard displayhook, not printing None
354 if obj is not None:
Georg Brandl0d089622010-07-30 16:00:46 +0000355 self.message(repr(obj))
Benjamin Petersond23f8222009-04-05 19:13:16 +0000356
Tim Peters2344fae2001-01-15 00:50:52 +0000357 def default(self, line):
358 if line[:1] == '!': line = line[1:]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000359 locals = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000360 globals = self.curframe.f_globals
361 try:
362 code = compile(line + '\n', '<stdin>', 'single')
Christian Heimes679db4a2008-01-18 09:56:22 +0000363 save_stdout = sys.stdout
364 save_stdin = sys.stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000365 save_displayhook = sys.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000366 try:
367 sys.stdin = self.stdin
368 sys.stdout = self.stdout
Benjamin Petersond23f8222009-04-05 19:13:16 +0000369 sys.displayhook = self.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000370 exec(code, globals, locals)
371 finally:
372 sys.stdout = save_stdout
373 sys.stdin = save_stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000374 sys.displayhook = save_displayhook
Tim Peters2344fae2001-01-15 00:50:52 +0000375 except:
Georg Brandl0d089622010-07-30 16:00:46 +0000376 exc_info = sys.exc_info()[:2]
377 self.error(traceback.format_exception_only(*exc_info)[-1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000378
379 def precmd(self, line):
380 """Handle alias expansion and ';;' separator."""
Guido van Rossum08454592002-07-12 13:10:53 +0000381 if not line.strip():
Tim Peters2344fae2001-01-15 00:50:52 +0000382 return line
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000383 args = line.split()
Raymond Hettinger54f02222002-06-01 14:18:47 +0000384 while args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000385 line = self.aliases[args[0]]
386 ii = 1
387 for tmpArg in args[1:]:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000388 line = line.replace("%" + str(ii),
Tim Peters2344fae2001-01-15 00:50:52 +0000389 tmpArg)
Georg Brandlac9a2bb2010-11-29 20:19:15 +0000390 ii += 1
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000391 line = line.replace("%*", ' '.join(args[1:]))
392 args = line.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000393 # split into ';;' separated commands
394 # unless it's an alias command
395 if args[0] != 'alias':
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000396 marker = line.find(';;')
Tim Peters2344fae2001-01-15 00:50:52 +0000397 if marker >= 0:
398 # queue up everything after marker
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000399 next = line[marker+2:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000400 self.cmdqueue.append(next)
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000401 line = line[:marker].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000402 return line
403
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000404 def onecmd(self, line):
405 """Interpret the argument as though it had been typed in response
406 to the prompt.
407
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000408 Checks whether this line is typed at the normal prompt or in
409 a breakpoint command list definition.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000410 """
411 if not self.commands_defining:
412 return cmd.Cmd.onecmd(self, line)
413 else:
414 return self.handle_command_def(line)
415
Georg Brandlb90ffd82010-07-30 22:20:16 +0000416 def handle_command_def(self, line):
Georg Brandl44f8bf92010-07-30 08:54:49 +0000417 """Handles one command line during command list definition."""
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000418 cmd, arg, line = self.parseline(line)
Georg Brandl44f8bf92010-07-30 08:54:49 +0000419 if not cmd:
420 return
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000421 if cmd == 'silent':
422 self.commands_silent[self.commands_bnum] = True
423 return # continue to handle other cmd def in the cmd list
424 elif cmd == 'end':
425 self.cmdqueue = []
426 return 1 # end of cmd list
427 cmdlist = self.commands[self.commands_bnum]
Georg Brandl44f8bf92010-07-30 08:54:49 +0000428 if arg:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000429 cmdlist.append(cmd+' '+arg)
430 else:
431 cmdlist.append(cmd)
432 # Determine if we must stop
433 try:
434 func = getattr(self, 'do_' + cmd)
435 except AttributeError:
436 func = self.default
Georg Brandl3078df02009-05-05 09:11:31 +0000437 # one of the resuming commands
438 if func.__name__ in self.commands_resuming:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000439 self.commands_doprompt[self.commands_bnum] = False
440 self.cmdqueue = []
441 return 1
442 return
443
Georg Brandl0d089622010-07-30 16:00:46 +0000444 # interface abstraction functions
445
446 def message(self, msg):
447 print(msg, file=self.stdout)
448
449 def error(self, msg):
450 print('***', msg, file=self.stdout)
451
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100452 # Generic completion functions. Individual complete_foo methods can be
453 # assigned below to one of these functions.
454
455 def _complete_location(self, text, line, begidx, endidx):
456 # Complete a file/module/function location for break/tbreak/clear.
457 if line.strip().endswith((':', ',')):
458 # Here comes a line number or a condition which we can't complete.
459 return []
460 # First, try to find matching functions (i.e. expressions).
461 try:
462 ret = self._complete_expression(text, line, begidx, endidx)
463 except Exception:
464 ret = []
465 # Then, try to complete file names as well.
466 globs = glob.glob(text + '*')
467 for fn in globs:
468 if os.path.isdir(fn):
469 ret.append(fn + '/')
470 elif os.path.isfile(fn) and fn.lower().endswith(('.py', '.pyw')):
471 ret.append(fn + ':')
472 return ret
473
474 def _complete_bpnumber(self, text, line, begidx, endidx):
475 # Complete a breakpoint number. (This would be more helpful if we could
476 # display additional info along with the completions, such as file/line
477 # of the breakpoint.)
478 return [str(i) for i, bp in enumerate(bdb.Breakpoint.bpbynumber)
479 if bp is not None and str(i).startswith(text)]
480
481 def _complete_expression(self, text, line, begidx, endidx):
482 # Complete an arbitrary expression.
483 if not self.curframe:
484 return []
485 # Collect globals and locals. It is usually not really sensible to also
486 # complete builtins, and they clutter the namespace quite heavily, so we
487 # leave them out.
488 ns = self.curframe.f_globals.copy()
489 ns.update(self.curframe_locals)
490 if '.' in text:
491 # Walk an attribute chain up to the last part, similar to what
492 # rlcompleter does. This will bail if any of the parts are not
493 # simple attribute access, which is what we want.
494 dotted = text.split('.')
495 try:
496 obj = ns[dotted[0]]
497 for part in dotted[1:-1]:
498 obj = getattr(obj, part)
499 except (KeyError, AttributeError):
500 return []
501 prefix = '.'.join(dotted[:-1]) + '.'
502 return [prefix + n for n in dir(obj) if n.startswith(dotted[-1])]
503 else:
504 # Complete a simple name.
505 return [n for n in ns.keys() if n.startswith(text)]
506
Tim Peters2344fae2001-01-15 00:50:52 +0000507 # Command definitions, called by cmdloop()
508 # The argument is the remaining string on the command line
509 # Return true to exit from the command loop
510
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000511 def do_commands(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000512 """commands [bpnumber]
513 (com) ...
514 (com) end
515 (Pdb)
Georg Brandl3078df02009-05-05 09:11:31 +0000516
Georg Brandl0d089622010-07-30 16:00:46 +0000517 Specify a list of commands for breakpoint number bpnumber.
518 The commands themselves are entered on the following lines.
519 Type a line containing just 'end' to terminate the commands.
520 The commands are executed when the breakpoint is hit.
521
522 To remove all commands from a breakpoint, type commands and
523 follow it immediately with end; that is, give no commands.
524
525 With no bpnumber argument, commands refers to the last
526 breakpoint set.
527
528 You can use breakpoint commands to start your program up
529 again. Simply use the continue command, or step, or any other
530 command that resumes execution.
531
532 Specifying any command resuming execution (currently continue,
533 step, next, return, jump, quit and their abbreviations)
534 terminates the command list (as if that command was
535 immediately followed by end). This is because any time you
536 resume execution (even with a simple next or step), you may
537 encounter another breakpoint -- which could have its own
538 command list, leading to ambiguities about which list to
539 execute.
540
541 If you use the 'silent' command in the command list, the usual
542 message about stopping at a breakpoint is not printed. This
543 may be desirable for breakpoints that are to print a specific
544 message and then continue. If none of the other commands
545 print anything, you will see no sign that the breakpoint was
546 reached.
547 """
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000548 if not arg:
Georg Brandl7410dd12010-07-30 12:01:20 +0000549 bnum = len(bdb.Breakpoint.bpbynumber) - 1
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000550 else:
551 try:
552 bnum = int(arg)
553 except:
Georg Brandl0d089622010-07-30 16:00:46 +0000554 self.error("Usage: commands [bnum]\n ...\n end")
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000555 return
556 self.commands_bnum = bnum
Georg Brandlb90ffd82010-07-30 22:20:16 +0000557 # Save old definitions for the case of a keyboard interrupt.
558 if bnum in self.commands:
559 old_command_defs = (self.commands[bnum],
560 self.commands_doprompt[bnum],
561 self.commands_silent[bnum])
562 else:
563 old_command_defs = None
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000564 self.commands[bnum] = []
565 self.commands_doprompt[bnum] = True
566 self.commands_silent[bnum] = False
Georg Brandlb90ffd82010-07-30 22:20:16 +0000567
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000568 prompt_back = self.prompt
569 self.prompt = '(com) '
570 self.commands_defining = True
Georg Brandl44f8bf92010-07-30 08:54:49 +0000571 try:
572 self.cmdloop()
Georg Brandlb90ffd82010-07-30 22:20:16 +0000573 except KeyboardInterrupt:
574 # Restore old definitions.
575 if old_command_defs:
576 self.commands[bnum] = old_command_defs[0]
577 self.commands_doprompt[bnum] = old_command_defs[1]
578 self.commands_silent[bnum] = old_command_defs[2]
579 else:
580 del self.commands[bnum]
581 del self.commands_doprompt[bnum]
582 del self.commands_silent[bnum]
583 self.error('command definition aborted, old commands restored')
Georg Brandl44f8bf92010-07-30 08:54:49 +0000584 finally:
585 self.commands_defining = False
586 self.prompt = prompt_back
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000587
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100588 complete_commands = _complete_bpnumber
589
Tim Peters2344fae2001-01-15 00:50:52 +0000590 def do_break(self, arg, temporary = 0):
Georg Brandl0d089622010-07-30 16:00:46 +0000591 """b(reak) [ ([filename:]lineno | function) [, condition] ]
592 Without argument, list all breaks.
593
594 With a line number argument, set a break at this line in the
595 current file. With a function name, set a break at the first
596 executable line of that function. If a second argument is
597 present, it is a string specifying an expression which must
598 evaluate to true before the breakpoint is honored.
599
600 The line number may be prefixed with a filename and a colon,
601 to specify a breakpoint in another file (probably one that
602 hasn't been loaded yet). The file is searched for on
603 sys.path; the .py suffix may be omitted.
604 """
Tim Peters2344fae2001-01-15 00:50:52 +0000605 if not arg:
606 if self.breaks: # There's at least one
Georg Brandl0d089622010-07-30 16:00:46 +0000607 self.message("Num Type Disp Enb Where")
Tim Peters2344fae2001-01-15 00:50:52 +0000608 for bp in bdb.Breakpoint.bpbynumber:
609 if bp:
Georg Brandl0d089622010-07-30 16:00:46 +0000610 self.message(bp.bpformat())
Tim Peters2344fae2001-01-15 00:50:52 +0000611 return
612 # parse arguments; comma has lowest precedence
613 # and cannot occur in filename
614 filename = None
615 lineno = None
616 cond = None
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000617 comma = arg.find(',')
Tim Peters2344fae2001-01-15 00:50:52 +0000618 if comma > 0:
619 # parse stuff after comma: "condition"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000620 cond = arg[comma+1:].lstrip()
621 arg = arg[:comma].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000622 # parse stuff before comma: [filename:]lineno | function
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000623 colon = arg.rfind(':')
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000624 funcname = None
Tim Peters2344fae2001-01-15 00:50:52 +0000625 if colon >= 0:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000626 filename = arg[:colon].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000627 f = self.lookupmodule(filename)
628 if not f:
Georg Brandl0d089622010-07-30 16:00:46 +0000629 self.error('%r not found from sys.path' % filename)
Tim Peters2344fae2001-01-15 00:50:52 +0000630 return
631 else:
632 filename = f
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000633 arg = arg[colon+1:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000634 try:
635 lineno = int(arg)
Georg Brandlf93390a2010-10-14 07:17:44 +0000636 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000637 self.error('Bad lineno: %s' % arg)
Tim Peters2344fae2001-01-15 00:50:52 +0000638 return
639 else:
640 # no colon; can be lineno or function
641 try:
642 lineno = int(arg)
643 except ValueError:
644 try:
645 func = eval(arg,
646 self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +0000647 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000648 except:
649 func = arg
650 try:
Christian Heimesff737952007-11-27 10:40:20 +0000651 if hasattr(func, '__func__'):
652 func = func.__func__
Neal Norwitz221085d2007-02-25 20:55:47 +0000653 code = func.__code__
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000654 #use co_name to identify the bkpt (function names
655 #could be aliased, but co_name is invariant)
656 funcname = code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000657 lineno = code.co_firstlineno
658 filename = code.co_filename
659 except:
660 # last thing to try
661 (ok, filename, ln) = self.lineinfo(arg)
662 if not ok:
Georg Brandl0d089622010-07-30 16:00:46 +0000663 self.error('The specified object %r is not a function '
664 'or was not found along sys.path.' % arg)
Tim Peters2344fae2001-01-15 00:50:52 +0000665 return
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000666 funcname = ok # ok contains a function name
Tim Peters2344fae2001-01-15 00:50:52 +0000667 lineno = int(ln)
668 if not filename:
669 filename = self.defaultFile()
670 # Check for reasonable breakpoint
671 line = self.checkline(filename, lineno)
672 if line:
673 # now set the break point
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000674 err = self.set_break(filename, line, temporary, cond, funcname)
Georg Brandl0d089622010-07-30 16:00:46 +0000675 if err:
Berker Peksagad5ffd42014-07-12 18:24:32 +0300676 self.error(err)
Tim Peters2344fae2001-01-15 00:50:52 +0000677 else:
678 bp = self.get_breaks(filename, line)[-1]
Georg Brandl0d089622010-07-30 16:00:46 +0000679 self.message("Breakpoint %d at %s:%d" %
680 (bp.number, bp.file, bp.line))
Tim Peters2344fae2001-01-15 00:50:52 +0000681
682 # To be overridden in derived debuggers
683 def defaultFile(self):
684 """Produce a reasonable default."""
685 filename = self.curframe.f_code.co_filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000686 if filename == '<string>' and self.mainpyfile:
687 filename = self.mainpyfile
Tim Peters2344fae2001-01-15 00:50:52 +0000688 return filename
689
690 do_b = do_break
691
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100692 complete_break = _complete_location
693 complete_b = _complete_location
694
Tim Peters2344fae2001-01-15 00:50:52 +0000695 def do_tbreak(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000696 """tbreak [ ([filename:]lineno | function) [, condition] ]
697 Same arguments as break, but sets a temporary breakpoint: it
698 is automatically deleted when first hit.
699 """
Tim Peters2344fae2001-01-15 00:50:52 +0000700 self.do_break(arg, 1)
701
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100702 complete_tbreak = _complete_location
703
Tim Peters2344fae2001-01-15 00:50:52 +0000704 def lineinfo(self, identifier):
705 failed = (None, None, None)
706 # Input is identifier, may be in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000707 idstring = identifier.split("'")
Tim Peters2344fae2001-01-15 00:50:52 +0000708 if len(idstring) == 1:
709 # not in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000710 id = idstring[0].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000711 elif len(idstring) == 3:
712 # quoted
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000713 id = idstring[1].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000714 else:
715 return failed
716 if id == '': return failed
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000717 parts = id.split('.')
Tim Peters2344fae2001-01-15 00:50:52 +0000718 # Protection for derived debuggers
719 if parts[0] == 'self':
720 del parts[0]
721 if len(parts) == 0:
722 return failed
723 # Best first guess at file to look at
724 fname = self.defaultFile()
725 if len(parts) == 1:
726 item = parts[0]
727 else:
728 # More than one part.
729 # First is module, second is method/class
730 f = self.lookupmodule(parts[0])
731 if f:
732 fname = f
733 item = parts[1]
734 answer = find_function(item, fname)
735 return answer or failed
736
737 def checkline(self, filename, lineno):
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000738 """Check whether specified line seems to be executable.
Tim Peters2344fae2001-01-15 00:50:52 +0000739
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000740 Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank
741 line or EOF). Warning: testing is not comprehensive.
742 """
Georg Brandl1e30bd32010-07-30 07:21:26 +0000743 # this method should be callable before starting debugging, so default
744 # to "no globals" if there is no current frame
745 globs = self.curframe.f_globals if hasattr(self, 'curframe') else None
746 line = linecache.getline(filename, lineno, globs)
Tim Peters2344fae2001-01-15 00:50:52 +0000747 if not line:
Georg Brandl0d089622010-07-30 16:00:46 +0000748 self.message('End of file')
Tim Peters2344fae2001-01-15 00:50:52 +0000749 return 0
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000750 line = line.strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000751 # Don't allow setting breakpoint at a blank line
Guido van Rossum08454592002-07-12 13:10:53 +0000752 if (not line or (line[0] == '#') or
753 (line[:3] == '"""') or line[:3] == "'''"):
Georg Brandl0d089622010-07-30 16:00:46 +0000754 self.error('Blank or comment')
Tim Peters2344fae2001-01-15 00:50:52 +0000755 return 0
Tim Peters2344fae2001-01-15 00:50:52 +0000756 return lineno
757
758 def do_enable(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000759 """enable bpnumber [bpnumber ...]
760 Enables the breakpoints given as a space separated list of
761 breakpoint numbers.
762 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000763 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000764 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000765 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000766 bp = self.get_bpbynumber(i)
767 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000768 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000769 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000770 bp.enable()
Georg Brandl0d089622010-07-30 16:00:46 +0000771 self.message('Enabled %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000772
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100773 complete_enable = _complete_bpnumber
774
Tim Peters2344fae2001-01-15 00:50:52 +0000775 def do_disable(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000776 """disable bpnumber [bpnumber ...]
777 Disables the breakpoints given as a space separated list of
778 breakpoint numbers. Disabling a breakpoint means it cannot
779 cause the program to stop execution, but unlike clearing a
780 breakpoint, it remains in the list of breakpoints and can be
781 (re-)enabled.
782 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000783 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000784 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000785 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000786 bp = self.get_bpbynumber(i)
787 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000788 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000789 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000790 bp.disable()
Georg Brandl0d089622010-07-30 16:00:46 +0000791 self.message('Disabled %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000792
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100793 complete_disable = _complete_bpnumber
794
Tim Peters2344fae2001-01-15 00:50:52 +0000795 def do_condition(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000796 """condition bpnumber [condition]
797 Set a new condition for the breakpoint, an expression which
798 must evaluate to true before the breakpoint is honored. If
799 condition is absent, any existing condition is removed; i.e.,
800 the breakpoint is made unconditional.
801 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000802 args = arg.split(' ', 1)
Thomas Woutersb2137042007-02-01 18:02:27 +0000803 try:
Tim Peters2344fae2001-01-15 00:50:52 +0000804 cond = args[1]
Georg Brandl7410dd12010-07-30 12:01:20 +0000805 except IndexError:
Tim Peters2344fae2001-01-15 00:50:52 +0000806 cond = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000807 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000808 bp = self.get_bpbynumber(args[0].strip())
Georg Brandl0079ffc2013-10-14 16:08:15 +0200809 except IndexError:
810 self.error('Breakpoint number expected')
Georg Brandl7410dd12010-07-30 12:01:20 +0000811 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000812 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000813 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000814 bp.cond = cond
815 if not cond:
Georg Brandl0d089622010-07-30 16:00:46 +0000816 self.message('Breakpoint %d is now unconditional.' % bp.number)
Georg Brandl7410dd12010-07-30 12:01:20 +0000817 else:
Georg Brandl0d089622010-07-30 16:00:46 +0000818 self.message('New condition set for breakpoint %d.' % bp.number)
Tim Peters2344fae2001-01-15 00:50:52 +0000819
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100820 complete_condition = _complete_bpnumber
821
Georg Brandl7410dd12010-07-30 12:01:20 +0000822 def do_ignore(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000823 """ignore bpnumber [count]
824 Set the ignore count for the given breakpoint number. If
825 count is omitted, the ignore count is set to 0. A breakpoint
826 becomes active when the ignore count is zero. When non-zero,
827 the count is decremented each time the breakpoint is reached
828 and the breakpoint is not disabled and any associated
829 condition evaluates to true.
830 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000831 args = arg.split()
Thomas Woutersb2137042007-02-01 18:02:27 +0000832 try:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000833 count = int(args[1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000834 except:
835 count = 0
Guido van Rossumd8faa362007-04-27 19:54:29 +0000836 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000837 bp = self.get_bpbynumber(args[0].strip())
Georg Brandl0079ffc2013-10-14 16:08:15 +0200838 except IndexError:
839 self.error('Breakpoint number expected')
Georg Brandl7410dd12010-07-30 12:01:20 +0000840 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000841 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000842 else:
Tim Peters2344fae2001-01-15 00:50:52 +0000843 bp.ignore = count
Guido van Rossum08454592002-07-12 13:10:53 +0000844 if count > 0:
Guido van Rossum08454592002-07-12 13:10:53 +0000845 if count > 1:
Georg Brandl0d089622010-07-30 16:00:46 +0000846 countstr = '%d crossings' % count
Tim Peters2344fae2001-01-15 00:50:52 +0000847 else:
Georg Brandl0d089622010-07-30 16:00:46 +0000848 countstr = '1 crossing'
849 self.message('Will ignore next %s of breakpoint %d.' %
850 (countstr, bp.number))
Tim Peters2344fae2001-01-15 00:50:52 +0000851 else:
Georg Brandl0d089622010-07-30 16:00:46 +0000852 self.message('Will stop next time breakpoint %d is reached.'
853 % bp.number)
Tim Peters2344fae2001-01-15 00:50:52 +0000854
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100855 complete_ignore = _complete_bpnumber
856
Tim Peters2344fae2001-01-15 00:50:52 +0000857 def do_clear(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000858 """cl(ear) filename:lineno\ncl(ear) [bpnumber [bpnumber...]]
859 With a space separated list of breakpoint numbers, clear
860 those breakpoints. Without argument, clear all breaks (but
861 first ask confirmation). With a filename:lineno argument,
862 clear all breaks at that line in that file.
863 """
Tim Peters2344fae2001-01-15 00:50:52 +0000864 if not arg:
865 try:
Guido van Rossumc5b6ab02007-05-27 09:19:52 +0000866 reply = input('Clear all breaks? ')
Tim Peters2344fae2001-01-15 00:50:52 +0000867 except EOFError:
868 reply = 'no'
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000869 reply = reply.strip().lower()
Tim Peters2344fae2001-01-15 00:50:52 +0000870 if reply in ('y', 'yes'):
Georg Brandl7410dd12010-07-30 12:01:20 +0000871 bplist = [bp for bp in bdb.Breakpoint.bpbynumber if bp]
Tim Peters2344fae2001-01-15 00:50:52 +0000872 self.clear_all_breaks()
Georg Brandl7410dd12010-07-30 12:01:20 +0000873 for bp in bplist:
Georg Brandl0d089622010-07-30 16:00:46 +0000874 self.message('Deleted %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000875 return
876 if ':' in arg:
877 # Make sure it works for "clear C:\foo\bar.py:12"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000878 i = arg.rfind(':')
Tim Peters2344fae2001-01-15 00:50:52 +0000879 filename = arg[:i]
880 arg = arg[i+1:]
881 try:
882 lineno = int(arg)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000883 except ValueError:
Tim Peters2344fae2001-01-15 00:50:52 +0000884 err = "Invalid line number (%s)" % arg
885 else:
Georg Brandl7410dd12010-07-30 12:01:20 +0000886 bplist = self.get_breaks(filename, lineno)
Tim Peters2344fae2001-01-15 00:50:52 +0000887 err = self.clear_break(filename, lineno)
Georg Brandl7410dd12010-07-30 12:01:20 +0000888 if err:
Georg Brandl0d089622010-07-30 16:00:46 +0000889 self.error(err)
Georg Brandl7410dd12010-07-30 12:01:20 +0000890 else:
891 for bp in bplist:
Georg Brandl0d089622010-07-30 16:00:46 +0000892 self.message('Deleted %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000893 return
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000894 numberlist = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000895 for i in numberlist:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000896 try:
Georg Brandl7410dd12010-07-30 12:01:20 +0000897 bp = self.get_bpbynumber(i)
898 except ValueError as err:
Georg Brandl0d089622010-07-30 16:00:46 +0000899 self.error(err)
Tim Peters2344fae2001-01-15 00:50:52 +0000900 else:
Senthil Kumaran6f107042010-11-29 11:54:17 +0000901 self.clear_bpbynumber(i)
Georg Brandl0d089622010-07-30 16:00:46 +0000902 self.message('Deleted %s' % bp)
Tim Peters2344fae2001-01-15 00:50:52 +0000903 do_cl = do_clear # 'c' is already an abbreviation for 'continue'
904
Georg Brandl4c7c3c52012-03-10 22:36:48 +0100905 complete_clear = _complete_location
906 complete_cl = _complete_location
907
Tim Peters2344fae2001-01-15 00:50:52 +0000908 def do_where(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000909 """w(here)
910 Print a stack trace, with the most recent frame at the bottom.
911 An arrow indicates the "current frame", which determines the
912 context of most commands. 'bt' is an alias for this command.
913 """
Tim Peters2344fae2001-01-15 00:50:52 +0000914 self.print_stack_trace()
915 do_w = do_where
Guido van Rossum6bd68352001-01-20 17:57:37 +0000916 do_bt = do_where
Tim Peters2344fae2001-01-15 00:50:52 +0000917
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000918 def _select_frame(self, number):
919 assert 0 <= number < len(self.stack)
920 self.curindex = number
921 self.curframe = self.stack[self.curindex][0]
922 self.curframe_locals = self.curframe.f_locals
923 self.print_stack_entry(self.stack[self.curindex])
924 self.lineno = None
925
Tim Peters2344fae2001-01-15 00:50:52 +0000926 def do_up(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000927 """u(p) [count]
928 Move the current frame count (default one) levels up in the
929 stack trace (to an older frame).
930 """
Tim Peters2344fae2001-01-15 00:50:52 +0000931 if self.curindex == 0:
Georg Brandl0d089622010-07-30 16:00:46 +0000932 self.error('Oldest frame')
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000933 return
934 try:
935 count = int(arg or 1)
936 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000937 self.error('Invalid frame count (%s)' % arg)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000938 return
939 if count < 0:
940 newframe = 0
Tim Peters2344fae2001-01-15 00:50:52 +0000941 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000942 newframe = max(0, self.curindex - count)
943 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000944 do_u = do_up
945
946 def do_down(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000947 """d(own) [count]
948 Move the current frame count (default one) levels down in the
949 stack trace (to a newer frame).
950 """
Tim Peters2344fae2001-01-15 00:50:52 +0000951 if self.curindex + 1 == len(self.stack):
Georg Brandl0d089622010-07-30 16:00:46 +0000952 self.error('Newest frame')
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000953 return
954 try:
955 count = int(arg or 1)
956 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000957 self.error('Invalid frame count (%s)' % arg)
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000958 return
959 if count < 0:
960 newframe = len(self.stack) - 1
Tim Peters2344fae2001-01-15 00:50:52 +0000961 else:
Georg Brandleb1f4aa2010-06-27 10:37:48 +0000962 newframe = min(len(self.stack) - 1, self.curindex + count)
963 self._select_frame(newframe)
Tim Peters2344fae2001-01-15 00:50:52 +0000964 do_d = do_down
965
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000966 def do_until(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000967 """unt(il) [lineno]
968 Without argument, continue execution until the line with a
969 number greater than the current one is reached. With a line
970 number, continue execution until a line with a number greater
971 or equal to that is reached. In both cases, also stop when
972 the current frame returns.
973 """
Georg Brandl2dfec552010-07-30 08:43:32 +0000974 if arg:
975 try:
976 lineno = int(arg)
977 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +0000978 self.error('Error in argument: %r' % arg)
Georg Brandl2dfec552010-07-30 08:43:32 +0000979 return
980 if lineno <= self.curframe.f_lineno:
Georg Brandl0d089622010-07-30 16:00:46 +0000981 self.error('"until" line number is smaller than current '
982 'line number')
Georg Brandl2dfec552010-07-30 08:43:32 +0000983 return
984 else:
985 lineno = None
986 self.set_until(self.curframe, lineno)
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000987 return 1
988 do_unt = do_until
989
Tim Peters2344fae2001-01-15 00:50:52 +0000990 def do_step(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +0000991 """s(tep)
992 Execute the current line, stop at the first possible occasion
993 (either in a function that is called or in the current
994 function).
995 """
Tim Peters2344fae2001-01-15 00:50:52 +0000996 self.set_step()
997 return 1
998 do_s = do_step
999
1000 def do_next(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001001 """n(ext)
1002 Continue execution until the next line in the current function
1003 is reached or it returns.
1004 """
Tim Peters2344fae2001-01-15 00:50:52 +00001005 self.set_next(self.curframe)
1006 return 1
1007 do_n = do_next
1008
Guido van Rossumd8faa362007-04-27 19:54:29 +00001009 def do_run(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001010 """run [args...]
1011 Restart the debugged python program. If a string is supplied
Ezio Melotti30b9d5d2013-08-17 15:50:46 +03001012 it is split with "shlex", and the result is used as the new
Georg Brandl0d089622010-07-30 16:00:46 +00001013 sys.argv. History, breakpoints, actions and debugger options
1014 are preserved. "restart" is an alias for "run".
1015 """
Guido van Rossumd8faa362007-04-27 19:54:29 +00001016 if arg:
1017 import shlex
1018 argv0 = sys.argv[0:1]
1019 sys.argv = shlex.split(arg)
1020 sys.argv[:0] = argv0
Georg Brandl0d089622010-07-30 16:00:46 +00001021 # this is caught in the main debugger loop
Guido van Rossumd8faa362007-04-27 19:54:29 +00001022 raise Restart
1023
1024 do_restart = do_run
1025
Tim Peters2344fae2001-01-15 00:50:52 +00001026 def do_return(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001027 """r(eturn)
1028 Continue execution until the current function returns.
1029 """
Tim Peters2344fae2001-01-15 00:50:52 +00001030 self.set_return(self.curframe)
1031 return 1
1032 do_r = do_return
1033
1034 def do_continue(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001035 """c(ont(inue))
1036 Continue execution, only stop when a breakpoint is encountered.
1037 """
Georg Brandl44f2b642010-12-04 16:00:47 +00001038 if not self.nosigint:
Andrew Svetlov539ee5d2012-12-04 21:08:28 +02001039 try:
1040 self._previous_sigint_handler = \
1041 signal.signal(signal.SIGINT, self.sigint_handler)
1042 except ValueError:
1043 # ValueError happens when do_continue() is invoked from
1044 # a non-main thread in which case we just continue without
1045 # SIGINT set. Would printing a message here (once) make
1046 # sense?
1047 pass
Tim Peters2344fae2001-01-15 00:50:52 +00001048 self.set_continue()
1049 return 1
1050 do_c = do_cont = do_continue
1051
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001052 def do_jump(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001053 """j(ump) lineno
1054 Set the next line that will be executed. Only available in
1055 the bottom-most frame. This lets you jump back and execute
1056 code again, or jump forward to skip code that you don't want
1057 to run.
1058
1059 It should be noted that not all jumps are allowed -- for
1060 instance it is not possible to jump into the middle of a
1061 for loop or out of a finally clause.
1062 """
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001063 if self.curindex + 1 != len(self.stack):
Georg Brandl0d089622010-07-30 16:00:46 +00001064 self.error('You can only jump within the bottom frame')
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001065 return
1066 try:
1067 arg = int(arg)
1068 except ValueError:
Georg Brandl0d089622010-07-30 16:00:46 +00001069 self.error("The 'jump' command requires a line number")
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001070 else:
1071 try:
1072 # Do the jump, fix up our copy of the stack, and display the
1073 # new position
1074 self.curframe.f_lineno = arg
1075 self.stack[self.curindex] = self.stack[self.curindex][0], arg
1076 self.print_stack_entry(self.stack[self.curindex])
Guido van Rossumb940e112007-01-10 16:19:56 +00001077 except ValueError as e:
Georg Brandl0d089622010-07-30 16:00:46 +00001078 self.error('Jump failed: %s' % e)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001079 do_j = do_jump
1080
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001081 def do_debug(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001082 """debug code
1083 Enter a recursive debugger that steps through the code
1084 argument (which is an arbitrary expression or statement to be
1085 executed in the current environment).
1086 """
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001087 sys.settrace(None)
1088 globals = self.curframe.f_globals
Benjamin Petersond23f8222009-04-05 19:13:16 +00001089 locals = self.curframe_locals
Guido van Rossum7736b5b2008-01-15 21:44:53 +00001090 p = Pdb(self.completekey, self.stdin, self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +00001091 p.prompt = "(%s) " % self.prompt.strip()
Georg Brandl0d089622010-07-30 16:00:46 +00001092 self.message("ENTERING RECURSIVE DEBUGGER")
Guido van Rossumed538d82003-04-09 19:36:34 +00001093 sys.call_tracing(p.run, (arg, globals, locals))
Georg Brandl0d089622010-07-30 16:00:46 +00001094 self.message("LEAVING RECURSIVE DEBUGGER")
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001095 sys.settrace(self.trace_dispatch)
1096 self.lastcmd = p.lastcmd
1097
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001098 complete_debug = _complete_expression
1099
Tim Peters2344fae2001-01-15 00:50:52 +00001100 def do_quit(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001101 """q(uit)\nexit
1102 Quit from the debugger. The program being executed is aborted.
1103 """
Georg Brandlac9a2bb2010-11-29 20:19:15 +00001104 self._user_requested_quit = True
Tim Peters2344fae2001-01-15 00:50:52 +00001105 self.set_quit()
1106 return 1
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001107
Tim Peters2344fae2001-01-15 00:50:52 +00001108 do_q = do_quit
Guido van Rossumd1c08f32002-04-15 00:48:24 +00001109 do_exit = do_quit
Tim Peters2344fae2001-01-15 00:50:52 +00001110
Guido van Rossumeef26072003-01-13 21:13:55 +00001111 def do_EOF(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001112 """EOF
1113 Handles the receipt of EOF as a command.
1114 """
1115 self.message('')
Georg Brandlac9a2bb2010-11-29 20:19:15 +00001116 self._user_requested_quit = True
Guido van Rossumeef26072003-01-13 21:13:55 +00001117 self.set_quit()
1118 return 1
1119
Tim Peters2344fae2001-01-15 00:50:52 +00001120 def do_args(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001121 """a(rgs)
1122 Print the argument list of the current function.
1123 """
Benjamin Petersond23f8222009-04-05 19:13:16 +00001124 co = self.curframe.f_code
1125 dict = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +00001126 n = co.co_argcount
1127 if co.co_flags & 4: n = n+1
1128 if co.co_flags & 8: n = n+1
1129 for i in range(n):
1130 name = co.co_varnames[i]
Georg Brandl0d089622010-07-30 16:00:46 +00001131 if name in dict:
1132 self.message('%s = %r' % (name, dict[name]))
1133 else:
1134 self.message('%s = *** undefined ***' % (name,))
Tim Peters2344fae2001-01-15 00:50:52 +00001135 do_a = do_args
Guido van Rossum2424f851998-09-11 22:50:09 +00001136
Tim Peters2344fae2001-01-15 00:50:52 +00001137 def do_retval(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001138 """retval
1139 Print the return value for the last return of a function.
1140 """
Benjamin Petersond23f8222009-04-05 19:13:16 +00001141 if '__return__' in self.curframe_locals:
Georg Brandl0d089622010-07-30 16:00:46 +00001142 self.message(repr(self.curframe_locals['__return__']))
Tim Peters2344fae2001-01-15 00:50:52 +00001143 else:
Georg Brandl0d089622010-07-30 16:00:46 +00001144 self.error('Not yet returned!')
Tim Peters2344fae2001-01-15 00:50:52 +00001145 do_rv = do_retval
Guido van Rossum2424f851998-09-11 22:50:09 +00001146
Barry Warsaw210bd202002-11-05 22:40:20 +00001147 def _getval(self, arg):
Tim Peters2344fae2001-01-15 00:50:52 +00001148 try:
Benjamin Petersond23f8222009-04-05 19:13:16 +00001149 return eval(arg, self.curframe.f_globals, self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +00001150 except:
Georg Brandl0d089622010-07-30 16:00:46 +00001151 exc_info = sys.exc_info()[:2]
1152 self.error(traceback.format_exception_only(*exc_info)[-1].strip())
Barry Warsaw210bd202002-11-05 22:40:20 +00001153 raise
Guido van Rossum2424f851998-09-11 22:50:09 +00001154
Georg Brandlcbc79c72010-12-04 16:21:42 +00001155 def _getval_except(self, arg, frame=None):
1156 try:
1157 if frame is None:
1158 return eval(arg, self.curframe.f_globals, self.curframe_locals)
1159 else:
1160 return eval(arg, frame.f_globals, frame.f_locals)
1161 except:
1162 exc_info = sys.exc_info()[:2]
1163 err = traceback.format_exception_only(*exc_info)[-1].strip()
1164 return _rstr('** raised %s **' % err)
1165
Barry Warsaw210bd202002-11-05 22:40:20 +00001166 def do_p(self, arg):
R David Murray78d692f2013-10-10 17:23:26 -04001167 """p expression
Georg Brandl0d089622010-07-30 16:00:46 +00001168 Print the value of the expression.
1169 """
Barry Warsaw210bd202002-11-05 22:40:20 +00001170 try:
Georg Brandl0d089622010-07-30 16:00:46 +00001171 self.message(repr(self._getval(arg)))
Barry Warsaw210bd202002-11-05 22:40:20 +00001172 except:
1173 pass
1174
1175 def do_pp(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001176 """pp expression
1177 Pretty-print the value of the expression.
1178 """
Barry Warsaw210bd202002-11-05 22:40:20 +00001179 try:
Georg Brandl0d089622010-07-30 16:00:46 +00001180 self.message(pprint.pformat(self._getval(arg)))
Barry Warsaw210bd202002-11-05 22:40:20 +00001181 except:
1182 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001183
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001184 complete_print = _complete_expression
1185 complete_p = _complete_expression
1186 complete_pp = _complete_expression
1187
Tim Peters2344fae2001-01-15 00:50:52 +00001188 def do_list(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001189 """l(ist) [first [,last] | .]
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001190
1191 List source code for the current file. Without arguments,
1192 list 11 lines around the current line or continue the previous
1193 listing. With . as argument, list 11 lines around the current
1194 line. With one argument, list 11 lines starting at that line.
1195 With two arguments, list the given range; if the second
1196 argument is less than the first, it is a count.
1197
1198 The current line in the current frame is indicated by "->".
1199 If an exception is being debugged, the line where the
1200 exception was originally raised or propagated is indicated by
1201 ">>", if it differs from the current line.
Georg Brandl0d089622010-07-30 16:00:46 +00001202 """
Tim Peters2344fae2001-01-15 00:50:52 +00001203 self.lastcmd = 'list'
1204 last = None
Georg Brandla91a94b2010-07-30 07:14:01 +00001205 if arg and arg != '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001206 try:
Georg Brandl0d089622010-07-30 16:00:46 +00001207 if ',' in arg:
1208 first, last = arg.split(',')
1209 first = int(first.strip())
1210 last = int(last.strip())
Tim Peters2344fae2001-01-15 00:50:52 +00001211 if last < first:
Georg Brandl0d089622010-07-30 16:00:46 +00001212 # assume it's a count
Tim Peters2344fae2001-01-15 00:50:52 +00001213 last = first + last
1214 else:
Georg Brandl0d089622010-07-30 16:00:46 +00001215 first = int(arg.strip())
1216 first = max(1, first - 5)
1217 except ValueError:
1218 self.error('Error in argument: %r' % arg)
Tim Peters2344fae2001-01-15 00:50:52 +00001219 return
Georg Brandla91a94b2010-07-30 07:14:01 +00001220 elif self.lineno is None or arg == '.':
Tim Peters2344fae2001-01-15 00:50:52 +00001221 first = max(1, self.curframe.f_lineno - 5)
1222 else:
1223 first = self.lineno + 1
1224 if last is None:
1225 last = first + 10
1226 filename = self.curframe.f_code.co_filename
1227 breaklist = self.get_file_breaks(filename)
1228 try:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001229 lines = linecache.getlines(filename, self.curframe.f_globals)
1230 self._print_lines(lines[first-1:last], first, breaklist,
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001231 self.curframe)
Georg Brandle59ca2a2010-07-30 17:04:28 +00001232 self.lineno = min(last, len(lines))
1233 if len(lines) < last:
1234 self.message('[EOF]')
Tim Peters2344fae2001-01-15 00:50:52 +00001235 except KeyboardInterrupt:
1236 pass
1237 do_l = do_list
Guido van Rossum2424f851998-09-11 22:50:09 +00001238
Georg Brandle59ca2a2010-07-30 17:04:28 +00001239 def do_longlist(self, arg):
1240 """longlist | ll
1241 List the whole source code for the current function or frame.
1242 """
1243 filename = self.curframe.f_code.co_filename
1244 breaklist = self.get_file_breaks(filename)
1245 try:
Georg Brandl5ed2b5a2010-07-30 18:08:12 +00001246 lines, lineno = getsourcelines(self.curframe)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +02001247 except OSError as err:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001248 self.error(err)
1249 return
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001250 self._print_lines(lines, lineno, breaklist, self.curframe)
Georg Brandle59ca2a2010-07-30 17:04:28 +00001251 do_ll = do_longlist
1252
1253 def do_source(self, arg):
1254 """source expression
1255 Try to get source code for the given object and display it.
1256 """
1257 try:
1258 obj = self._getval(arg)
1259 except:
1260 return
1261 try:
Georg Brandl5ed2b5a2010-07-30 18:08:12 +00001262 lines, lineno = getsourcelines(obj)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +02001263 except (OSError, TypeError) as err:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001264 self.error(err)
1265 return
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001266 self._print_lines(lines, lineno)
Georg Brandle59ca2a2010-07-30 17:04:28 +00001267
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001268 complete_source = _complete_expression
1269
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001270 def _print_lines(self, lines, start, breaks=(), frame=None):
Georg Brandle59ca2a2010-07-30 17:04:28 +00001271 """Print a range of lines."""
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001272 if frame:
1273 current_lineno = frame.f_lineno
1274 exc_lineno = self.tb_lineno.get(frame, -1)
1275 else:
1276 current_lineno = exc_lineno = -1
Georg Brandle59ca2a2010-07-30 17:04:28 +00001277 for lineno, line in enumerate(lines, start):
1278 s = str(lineno).rjust(3)
1279 if len(s) < 4:
1280 s += ' '
1281 if lineno in breaks:
1282 s += 'B'
1283 else:
1284 s += ' '
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001285 if lineno == current_lineno:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001286 s += '->'
Georg Brandl0a9c3e92010-07-30 18:46:38 +00001287 elif lineno == exc_lineno:
Georg Brandle59ca2a2010-07-30 17:04:28 +00001288 s += '>>'
1289 self.message(s + '\t' + line.rstrip())
1290
Tim Peters2344fae2001-01-15 00:50:52 +00001291 def do_whatis(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001292 """whatis arg
1293 Print the type of the argument.
1294 """
Tim Peters2344fae2001-01-15 00:50:52 +00001295 try:
Georg Brandl0d089622010-07-30 16:00:46 +00001296 value = self._getval(arg)
Tim Peters2344fae2001-01-15 00:50:52 +00001297 except:
Georg Brandl0d089622010-07-30 16:00:46 +00001298 # _getval() already printed the error
Tim Peters2344fae2001-01-15 00:50:52 +00001299 return
1300 code = None
1301 # Is it a function?
Georg Brandl0d089622010-07-30 16:00:46 +00001302 try:
1303 code = value.__code__
1304 except Exception:
1305 pass
Tim Peters2344fae2001-01-15 00:50:52 +00001306 if code:
Georg Brandl0d089622010-07-30 16:00:46 +00001307 self.message('Function %s' % code.co_name)
Tim Peters2344fae2001-01-15 00:50:52 +00001308 return
1309 # Is it an instance method?
Georg Brandl0d089622010-07-30 16:00:46 +00001310 try:
1311 code = value.__func__.__code__
1312 except Exception:
1313 pass
Tim Peters2344fae2001-01-15 00:50:52 +00001314 if code:
Georg Brandl0d089622010-07-30 16:00:46 +00001315 self.message('Method %s' % code.co_name)
1316 return
1317 # Is it a class?
1318 if value.__class__ is type:
Serhiy Storchaka521e5862014-07-22 15:00:37 +03001319 self.message('Class %s.%s' % (value.__module__, value.__qualname__))
Tim Peters2344fae2001-01-15 00:50:52 +00001320 return
1321 # None of the above...
Georg Brandl0d089622010-07-30 16:00:46 +00001322 self.message(type(value))
Guido van Rossum8e2ec561993-07-29 09:37:38 +00001323
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001324 complete_whatis = _complete_expression
1325
Georg Brandlcbc79c72010-12-04 16:21:42 +00001326 def do_display(self, arg):
1327 """display [expression]
1328
1329 Display the value of the expression if it changed, each time execution
1330 stops in the current frame.
1331
1332 Without expression, list all display expressions for the current frame.
1333 """
1334 if not arg:
1335 self.message('Currently displaying:')
1336 for item in self.displaying.get(self.curframe, {}).items():
1337 self.message('%s: %r' % item)
1338 else:
1339 val = self._getval_except(arg)
1340 self.displaying.setdefault(self.curframe, {})[arg] = val
1341 self.message('display %s: %r' % (arg, val))
1342
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001343 complete_display = _complete_expression
1344
Georg Brandlcbc79c72010-12-04 16:21:42 +00001345 def do_undisplay(self, arg):
1346 """undisplay [expression]
1347
1348 Do not display the expression any more in the current frame.
1349
1350 Without expression, clear all display expressions for the current frame.
1351 """
1352 if arg:
1353 try:
1354 del self.displaying.get(self.curframe, {})[arg]
1355 except KeyError:
1356 self.error('not displaying %s' % arg)
1357 else:
1358 self.displaying.pop(self.curframe, None)
1359
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001360 def complete_undisplay(self, text, line, begidx, endidx):
1361 return [e for e in self.displaying.get(self.curframe, {})
1362 if e.startswith(text)]
1363
Georg Brandl1acb7462010-12-04 11:20:26 +00001364 def do_interact(self, arg):
1365 """interact
1366
Ezio Melotti30b9d5d2013-08-17 15:50:46 +03001367 Start an interactive interpreter whose global namespace
Georg Brandl1acb7462010-12-04 11:20:26 +00001368 contains all the (global and local) names found in the current scope.
1369 """
1370 ns = self.curframe.f_globals.copy()
1371 ns.update(self.curframe_locals)
1372 code.interact("*interactive*", local=ns)
1373
Tim Peters2344fae2001-01-15 00:50:52 +00001374 def do_alias(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001375 """alias [name [command [parameter parameter ...] ]]
1376 Create an alias called 'name' that executes 'command'. The
1377 command must *not* be enclosed in quotes. Replaceable
1378 parameters can be indicated by %1, %2, and so on, while %* is
1379 replaced by all the parameters. If no command is given, the
1380 current alias for name is shown. If no name is given, all
1381 aliases are listed.
1382
1383 Aliases may be nested and can contain anything that can be
1384 legally typed at the pdb prompt. Note! You *can* override
1385 internal pdb commands with aliases! Those internal commands
1386 are then hidden until the alias is removed. Aliasing is
1387 recursively applied to the first word of the command line; all
1388 other words in the line are left alone.
1389
1390 As an example, here are two useful aliases (especially when
1391 placed in the .pdbrc file):
1392
1393 # Print instance variables (usage "pi classInst")
R David Murray78d692f2013-10-10 17:23:26 -04001394 alias pi for k in %1.__dict__.keys(): print("%1.",k,"=",%1.__dict__[k])
Georg Brandl0d089622010-07-30 16:00:46 +00001395 # Print instance variables in self
1396 alias ps pi self
1397 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001398 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001399 if len(args) == 0:
Benjamin Petersonbe74a372009-09-11 21:17:13 +00001400 keys = sorted(self.aliases.keys())
Tim Peters2344fae2001-01-15 00:50:52 +00001401 for alias in keys:
Georg Brandl0d089622010-07-30 16:00:46 +00001402 self.message("%s = %s" % (alias, self.aliases[alias]))
Tim Peters2344fae2001-01-15 00:50:52 +00001403 return
Guido van Rossum08454592002-07-12 13:10:53 +00001404 if args[0] in self.aliases and len(args) == 1:
Georg Brandl0d089622010-07-30 16:00:46 +00001405 self.message("%s = %s" % (args[0], self.aliases[args[0]]))
Tim Peters2344fae2001-01-15 00:50:52 +00001406 else:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001407 self.aliases[args[0]] = ' '.join(args[1:])
Guido van Rossum23efba41992-01-27 16:58:47 +00001408
Tim Peters2344fae2001-01-15 00:50:52 +00001409 def do_unalias(self, arg):
Georg Brandl0d089622010-07-30 16:00:46 +00001410 """unalias name
1411 Delete the specified alias.
1412 """
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +00001413 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +00001414 if len(args) == 0: return
Raymond Hettinger54f02222002-06-01 14:18:47 +00001415 if args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +00001416 del self.aliases[args[0]]
Guido van Rossum00230781993-03-29 11:39:45 +00001417
Georg Brandl4c7c3c52012-03-10 22:36:48 +01001418 def complete_unalias(self, text, line, begidx, endidx):
1419 return [a for a in self.aliases if a.startswith(text)]
1420
Georg Brandl0d089622010-07-30 16:00:46 +00001421 # List of all the commands making the program resume execution.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001422 commands_resuming = ['do_continue', 'do_step', 'do_next', 'do_return',
1423 'do_quit', 'do_jump']
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001424
Tim Peters2344fae2001-01-15 00:50:52 +00001425 # Print a traceback starting at the top stack frame.
1426 # The most recently entered frame is printed last;
1427 # this is different from dbx and gdb, but consistent with
1428 # the Python interpreter's stack trace.
1429 # It is also consistent with the up/down commands (which are
1430 # compatible with dbx and gdb: up moves towards 'main()'
1431 # and down moves towards the most recent stack frame).
Guido van Rossum2424f851998-09-11 22:50:09 +00001432
Tim Peters2344fae2001-01-15 00:50:52 +00001433 def print_stack_trace(self):
1434 try:
1435 for frame_lineno in self.stack:
1436 self.print_stack_entry(frame_lineno)
1437 except KeyboardInterrupt:
1438 pass
Guido van Rossum2424f851998-09-11 22:50:09 +00001439
Tim Peters2344fae2001-01-15 00:50:52 +00001440 def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix):
1441 frame, lineno = frame_lineno
1442 if frame is self.curframe:
Georg Brandl0d089622010-07-30 16:00:46 +00001443 prefix = '> '
Tim Peters2344fae2001-01-15 00:50:52 +00001444 else:
Georg Brandl0d089622010-07-30 16:00:46 +00001445 prefix = ' '
1446 self.message(prefix +
1447 self.format_stack_entry(frame_lineno, prompt_prefix))
Guido van Rossum2424f851998-09-11 22:50:09 +00001448
Georg Brandl0d089622010-07-30 16:00:46 +00001449 # Provide help
Guido van Rossum921c8241992-01-10 14:54:42 +00001450
Georg Brandl0d089622010-07-30 16:00:46 +00001451 def do_help(self, arg):
1452 """h(elp)
1453 Without argument, print the list of available commands.
1454 With a command name as argument, print help about that command.
1455 "help pdb" shows the full pdb documentation.
1456 "help exec" gives help on the ! command.
1457 """
1458 if not arg:
1459 return cmd.Cmd.do_help(self, arg)
1460 try:
1461 try:
1462 topic = getattr(self, 'help_' + arg)
1463 return topic()
1464 except AttributeError:
1465 command = getattr(self, 'do_' + arg)
1466 except AttributeError:
1467 self.error('No help for %r' % arg)
1468 else:
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001469 if sys.flags.optimize >= 2:
1470 self.error('No help for %r; please do not run Python with -OO '
1471 'if you need command help' % arg)
1472 return
Georg Brandl0d089622010-07-30 16:00:46 +00001473 self.message(command.__doc__.rstrip())
Guido van Rossum921c8241992-01-10 14:54:42 +00001474
Georg Brandl0d089622010-07-30 16:00:46 +00001475 do_h = do_help
Barry Warsaw210bd202002-11-05 22:40:20 +00001476
Tim Peters2344fae2001-01-15 00:50:52 +00001477 def help_exec(self):
Georg Brandl0d089622010-07-30 16:00:46 +00001478 """(!) statement
1479 Execute the (one-line) statement in the context of the current
1480 stack frame. The exclamation point can be omitted unless the
1481 first word of the statement resembles a debugger command. To
1482 assign to a global variable you must always prefix the command
1483 with a 'global' command, e.g.:
1484 (Pdb) global list_options; list_options = ['-l']
1485 (Pdb)
1486 """
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001487 self.message((self.help_exec.__doc__ or '').strip())
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001488
Tim Peters2344fae2001-01-15 00:50:52 +00001489 def help_pdb(self):
1490 help()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001491
Georg Brandl0d089622010-07-30 16:00:46 +00001492 # other helper functions
1493
Tim Peters2344fae2001-01-15 00:50:52 +00001494 def lookupmodule(self, filename):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001495 """Helper function for break/clear parsing -- may be overridden.
1496
1497 lookupmodule() translates (possibly incomplete) file or module name
1498 into an absolute file name.
1499 """
1500 if os.path.isabs(filename) and os.path.exists(filename):
Tim Peterse718f612004-10-12 21:51:32 +00001501 return filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001502 f = os.path.join(sys.path[0], filename)
1503 if os.path.exists(f) and self.canonic(f) == self.mainpyfile:
1504 return f
Tim Peters2344fae2001-01-15 00:50:52 +00001505 root, ext = os.path.splitext(filename)
1506 if ext == '':
1507 filename = filename + '.py'
1508 if os.path.isabs(filename):
1509 return filename
1510 for dirname in sys.path:
1511 while os.path.islink(dirname):
1512 dirname = os.readlink(dirname)
1513 fullname = os.path.join(dirname, filename)
1514 if os.path.exists(fullname):
1515 return fullname
1516 return None
Guido van Rossumb5699c71998-07-20 23:13:54 +00001517
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001518 def _runscript(self, filename):
Guido van Rossumd8faa362007-04-27 19:54:29 +00001519 # The script has to run in __main__ namespace (or imports from
1520 # __main__ will break).
1521 #
1522 # So we clear up the __main__ and set several special variables
1523 # (this gets rid of pdb's globals and cleans old variables on restarts).
1524 import __main__
1525 __main__.__dict__.clear()
1526 __main__.__dict__.update({"__name__" : "__main__",
1527 "__file__" : filename,
1528 "__builtins__": __builtins__,
1529 })
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001530
1531 # When bdb sets tracing, a number of call and line events happens
1532 # BEFORE debugger even reaches user's code (and the exact sequence of
1533 # events depends on python version). So we take special measures to
1534 # avoid stopping before we reach the main script (see user_line and
1535 # user_call for details).
Georg Brandlac9a2bb2010-11-29 20:19:15 +00001536 self._wait_for_mainpyfile = True
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001537 self.mainpyfile = self.canonic(filename)
Georg Brandlac9a2bb2010-11-29 20:19:15 +00001538 self._user_requested_quit = False
Georg Brandld07ac642009-08-13 07:50:57 +00001539 with open(filename, "rb") as fp:
1540 statement = "exec(compile(%r, %r, 'exec'))" % \
1541 (fp.read(), self.mainpyfile)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001542 self.run(statement)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001543
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001544# Collect all command help into docstring, if not run with -OO
Georg Brandl0d089622010-07-30 16:00:46 +00001545
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001546if __doc__ is not None:
1547 # unfortunately we can't guess this order from the class definition
1548 _help_order = [
1549 'help', 'where', 'down', 'up', 'break', 'tbreak', 'clear', 'disable',
1550 'enable', 'ignore', 'condition', 'commands', 'step', 'next', 'until',
1551 'jump', 'return', 'retval', 'run', 'continue', 'list', 'longlist',
R David Murray78d692f2013-10-10 17:23:26 -04001552 'args', 'p', 'pp', 'whatis', 'source', 'display', 'undisplay',
Georg Brandlcbc79c72010-12-04 16:21:42 +00001553 'interact', 'alias', 'unalias', 'debug', 'quit',
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001554 ]
Georg Brandl0d089622010-07-30 16:00:46 +00001555
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001556 for _command in _help_order:
1557 __doc__ += getattr(Pdb, 'do_' + _command).__doc__.strip() + '\n\n'
1558 __doc__ += Pdb.help_exec.__doc__
Georg Brandl0d089622010-07-30 16:00:46 +00001559
Georg Brandl9e7dbc82010-10-14 07:14:31 +00001560 del _help_order, _command
1561
Georg Brandl0d089622010-07-30 16:00:46 +00001562
Guido van Rossum35771131992-09-08 11:59:04 +00001563# Simplified interface
1564
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001565def run(statement, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001566 Pdb().run(statement, globals, locals)
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001567
1568def runeval(expression, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001569 return Pdb().runeval(expression, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001570
1571def runctx(statement, globals, locals):
Tim Peters2344fae2001-01-15 00:50:52 +00001572 # B/W compatibility
1573 run(statement, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001574
Raymond Hettinger2ef7e6c2004-10-24 00:32:24 +00001575def runcall(*args, **kwds):
1576 return Pdb().runcall(*args, **kwds)
Guido van Rossum4e160981992-09-02 20:43:20 +00001577
Guido van Rossumb6775db1994-08-01 11:34:53 +00001578def set_trace():
Johannes Gijsbers84a6c202004-11-07 11:35:30 +00001579 Pdb().set_trace(sys._getframe().f_back)
Guido van Rossum35771131992-09-08 11:59:04 +00001580
1581# Post-Mortem interface
1582
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001583def post_mortem(t=None):
1584 # handling the default
1585 if t is None:
1586 # sys.exc_info() returns (type, value, traceback) if an exception is
1587 # being handled, otherwise it returns None
1588 t = sys.exc_info()[2]
Georg Brandl0d089622010-07-30 16:00:46 +00001589 if t is None:
1590 raise ValueError("A valid traceback must be passed if no "
1591 "exception is being handled")
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001592
Tim Peters2344fae2001-01-15 00:50:52 +00001593 p = Pdb()
1594 p.reset()
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001595 p.interaction(None, t)
Guido van Rossum35771131992-09-08 11:59:04 +00001596
1597def pm():
Tim Peters2344fae2001-01-15 00:50:52 +00001598 post_mortem(sys.last_traceback)
Guido van Rossum35771131992-09-08 11:59:04 +00001599
1600
1601# Main program for testing
1602
Guido van Rossum23efba41992-01-27 16:58:47 +00001603TESTCMD = 'import x; x.main()'
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001604
Guido van Rossum921c8241992-01-10 14:54:42 +00001605def test():
Tim Peters2344fae2001-01-15 00:50:52 +00001606 run(TESTCMD)
Guido van Rossume61fa0a1993-10-22 13:56:35 +00001607
1608# print help
1609def help():
Georg Brandl02053ee2010-07-18 10:11:03 +00001610 import pydoc
1611 pydoc.pager(__doc__)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001612
Georg Brandle0230912010-07-30 08:29:39 +00001613_usage = """\
1614usage: pdb.py [-c command] ... pyfile [arg] ...
1615
1616Debug the Python program given by pyfile.
1617
1618Initial commands are read from .pdbrc files in your home directory
1619and in the current directory, if they exist. Commands supplied with
1620-c are executed after commands from .pdbrc files.
1621
1622To let the script run until an exception occurs, use "-c continue".
Georg Brandl2dfec552010-07-30 08:43:32 +00001623To let the script run up to a given line X in the debugged file, use
1624"-c 'until X'"."""
Georg Brandle0230912010-07-30 08:29:39 +00001625
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001626def main():
Georg Brandle0230912010-07-30 08:29:39 +00001627 import getopt
1628
1629 opts, args = getopt.getopt(sys.argv[1:], 'hc:', ['--help', '--command='])
1630
1631 if not args:
1632 print(_usage)
Tim Peters2344fae2001-01-15 00:50:52 +00001633 sys.exit(2)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001634
Georg Brandle0230912010-07-30 08:29:39 +00001635 commands = []
1636 for opt, optarg in opts:
1637 if opt in ['-h', '--help']:
1638 print(_usage)
1639 sys.exit()
1640 elif opt in ['-c', '--command']:
1641 commands.append(optarg)
1642
1643 mainpyfile = args[0] # Get script filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001644 if not os.path.exists(mainpyfile):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001645 print('Error:', mainpyfile, 'does not exist')
Tim Peters2344fae2001-01-15 00:50:52 +00001646 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001647
Georg Brandle0230912010-07-30 08:29:39 +00001648 sys.argv[:] = args # Hide "pdb.py" and pdb options from argument list
Guido van Rossumec577d51996-09-10 17:39:34 +00001649
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001650 # Replace pdb's dir with script's dir in front of module search path.
1651 sys.path[0] = os.path.dirname(mainpyfile)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001652
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001653 # Note on saving/restoring sys.argv: it's a good idea when sys.argv was
1654 # modified by the script being debugged. It's a bad idea when it was
Georg Brandl3078df02009-05-05 09:11:31 +00001655 # changed by the user from the command line. There is a "restart" command
1656 # which allows explicit specification of command line arguments.
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001657 pdb = Pdb()
Georg Brandle0230912010-07-30 08:29:39 +00001658 pdb.rcLines.extend(commands)
Georg Brandl1e30bd32010-07-30 07:21:26 +00001659 while True:
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001660 try:
1661 pdb._runscript(mainpyfile)
1662 if pdb._user_requested_quit:
1663 break
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001664 print("The program finished and will be restarted")
Guido van Rossumd8faa362007-04-27 19:54:29 +00001665 except Restart:
1666 print("Restarting", mainpyfile, "with arguments:")
Georg Brandle0230912010-07-30 08:29:39 +00001667 print("\t" + " ".join(args))
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001668 except SystemExit:
1669 # In most cases SystemExit does not warrant a post-mortem session.
Georg Brandle0230912010-07-30 08:29:39 +00001670 print("The program exited via sys.exit(). Exit status:", end=' ')
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001671 print(sys.exc_info()[1])
Terry Jan Reedyca3f4352015-09-05 19:13:26 -04001672 except SyntaxError:
1673 traceback.print_exc()
1674 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001675 except:
1676 traceback.print_exc()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001677 print("Uncaught exception. Entering post mortem debugging")
1678 print("Running 'cont' or 'step' will restart the program")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001679 t = sys.exc_info()[2]
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001680 pdb.interaction(None, t)
Georg Brandl3078df02009-05-05 09:11:31 +00001681 print("Post mortem debugger finished. The " + mainpyfile +
1682 " will be restarted")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001683
1684
1685# When invoked as main program, invoke the debugger on a script
Guido van Rossumd8faa362007-04-27 19:54:29 +00001686if __name__ == '__main__':
1687 import pdb
1688 pdb.main()