blob: 1fb5174e0f8b1b7d2c96dbffee989e2f883c0814 [file] [log] [blame]
Guido van Rossumf06ee5f1996-11-27 19:52:01 +00001#! /usr/bin/env python
Guido van Rossumf17361d1996-07-30 16:28:13 +00002
Guido van Rossum4b8c6ea2000-02-04 15:39:30 +00003"""A Python debugger."""
Guido van Rossum92df0c61992-01-14 18:30:15 +00004
Guido van Rossum23efba41992-01-27 16:58:47 +00005# (See pdb.doc for documentation.)
Guido van Rossum921c8241992-01-10 14:54:42 +00006
Guido van Rossum921c8241992-01-10 14:54:42 +00007import sys
8import linecache
Guido van Rossum23efba41992-01-27 16:58:47 +00009import cmd
10import bdb
Alexandre Vassalotti1f2ba4b2008-05-16 07:12:44 +000011from reprlib import Repr
Guido van Rossumb5699c71998-07-20 23:13:54 +000012import os
Barry Warsaw2bee8fe1999-09-09 16:32:41 +000013import re
Barry Warsaw210bd202002-11-05 22:40:20 +000014import pprint
Johannes Gijsbers25b38c82004-10-12 18:12:09 +000015import traceback
Guido van Rossumd8faa362007-04-27 19:54:29 +000016
17
18class Restart(Exception):
19 """Causes a debugger to be restarted for the debugged python program."""
20 pass
21
Guido van Rossumef1b41b2002-09-10 21:57:14 +000022# Create a custom safe Repr instance and increase its maxstring.
23# The default of 30 truncates error messages too easily.
24_repr = Repr()
25_repr.maxstring = 200
26_saferepr = _repr.repr
27
Skip Montanaro352674d2001-02-07 23:14:30 +000028__all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace",
29 "post_mortem", "help"]
30
Barry Warsaw2bee8fe1999-09-09 16:32:41 +000031def find_function(funcname, filename):
Thomas Wouters89f507f2006-12-13 04:49:30 +000032 cre = re.compile(r'def\s+%s\s*[(]' % re.escape(funcname))
Tim Peters2344fae2001-01-15 00:50:52 +000033 try:
34 fp = open(filename)
35 except IOError:
36 return None
37 # consumer of this info expects the first line to be 1
38 lineno = 1
39 answer = None
40 while 1:
41 line = fp.readline()
42 if line == '':
43 break
44 if cre.match(line):
45 answer = funcname, filename, lineno
46 break
47 lineno = lineno + 1
48 fp.close()
49 return answer
Guido van Rossum921c8241992-01-10 14:54:42 +000050
51
Guido van Rossuma558e371994-11-10 22:27:35 +000052# Interaction prompt line will separate file and call info from code
53# text using value of line_prefix string. A newline and arrow may
54# be to your liking. You can set it once pdb is imported using the
55# command "pdb.line_prefix = '\n% '".
Tim Peters2344fae2001-01-15 00:50:52 +000056# line_prefix = ': ' # Use this to get the old situation back
57line_prefix = '\n-> ' # Probably a better default
Guido van Rossuma558e371994-11-10 22:27:35 +000058
Guido van Rossum23efba41992-01-27 16:58:47 +000059class Pdb(bdb.Bdb, cmd.Cmd):
Guido van Rossum2424f851998-09-11 22:50:09 +000060
Georg Brandl243ad662009-05-05 09:00:19 +000061 def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None):
62 bdb.Bdb.__init__(self, skip=skip)
Thomas Wouters477c8d52006-05-27 19:21:47 +000063 cmd.Cmd.__init__(self, completekey, stdin, stdout)
64 if stdout:
65 self.use_rawinput = 0
Tim Peters2344fae2001-01-15 00:50:52 +000066 self.prompt = '(Pdb) '
67 self.aliases = {}
Johannes Gijsbers25b38c82004-10-12 18:12:09 +000068 self.mainpyfile = ''
69 self._wait_for_mainpyfile = 0
Tim Peters2344fae2001-01-15 00:50:52 +000070 # Try to load readline if it exists
71 try:
72 import readline
73 except ImportError:
74 pass
Guido van Rossum2424f851998-09-11 22:50:09 +000075
Tim Peters2344fae2001-01-15 00:50:52 +000076 # Read $HOME/.pdbrc and ./.pdbrc
77 self.rcLines = []
Raymond Hettinger54f02222002-06-01 14:18:47 +000078 if 'HOME' in os.environ:
Tim Peters2344fae2001-01-15 00:50:52 +000079 envHome = os.environ['HOME']
80 try:
81 rcFile = open(os.path.join(envHome, ".pdbrc"))
82 except IOError:
83 pass
84 else:
85 for line in rcFile.readlines():
86 self.rcLines.append(line)
87 rcFile.close()
88 try:
89 rcFile = open(".pdbrc")
90 except IOError:
91 pass
92 else:
93 for line in rcFile.readlines():
94 self.rcLines.append(line)
95 rcFile.close()
Guido van Rossum23efba41992-01-27 16:58:47 +000096
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000097 self.commands = {} # associates a command list to breakpoint numbers
Benjamin Petersond23f8222009-04-05 19:13:16 +000098 self.commands_doprompt = {} # for each bp num, tells if the prompt
99 # must be disp. after execing the cmd list
100 self.commands_silent = {} # for each bp num, tells if the stack trace
101 # must be disp. after execing the cmd list
102 self.commands_defining = False # True while in the process of defining
103 # a command list
104 self.commands_bnum = None # The breakpoint number for which we are
105 # defining a list
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000106
Tim Peters2344fae2001-01-15 00:50:52 +0000107 def reset(self):
108 bdb.Bdb.reset(self)
109 self.forget()
Guido van Rossum23efba41992-01-27 16:58:47 +0000110
Tim Peters2344fae2001-01-15 00:50:52 +0000111 def forget(self):
112 self.lineno = None
113 self.stack = []
114 self.curindex = 0
115 self.curframe = None
Guido van Rossum2424f851998-09-11 22:50:09 +0000116
Tim Peters2344fae2001-01-15 00:50:52 +0000117 def setup(self, f, t):
118 self.forget()
119 self.stack, self.curindex = self.get_stack(f, t)
120 self.curframe = self.stack[self.curindex][0]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000121 # The f_locals dictionary is updated from the actual frame
122 # locals whenever the .f_locals accessor is called, so we
123 # cache it here to ensure that modifications are not overwritten.
124 self.curframe_locals = self.curframe.f_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000125 self.execRcLines()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000126
Tim Peters2344fae2001-01-15 00:50:52 +0000127 # Can be executed earlier than 'setup' if desired
128 def execRcLines(self):
129 if self.rcLines:
130 # Make local copy because of recursion
131 rcLines = self.rcLines
132 # executed only once
133 self.rcLines = []
134 for line in rcLines:
135 line = line[:-1]
Guido van Rossum08454592002-07-12 13:10:53 +0000136 if len(line) > 0 and line[0] != '#':
137 self.onecmd(line)
Guido van Rossum2424f851998-09-11 22:50:09 +0000138
Tim Peters280488b2002-08-23 18:19:30 +0000139 # Override Bdb methods
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000140
141 def user_call(self, frame, argument_list):
142 """This method is called when there is the remote possibility
143 that we ever need to stop in this function."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000144 if self._wait_for_mainpyfile:
145 return
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000146 if self.stop_here(frame):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000147 print('--Call--', file=self.stdout)
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000148 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000149
Tim Peters2344fae2001-01-15 00:50:52 +0000150 def user_line(self, frame):
151 """This function is called when we stop or break at this line."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000152 if self._wait_for_mainpyfile:
153 if (self.mainpyfile != self.canonic(frame.f_code.co_filename)
154 or frame.f_lineno<= 0):
155 return
156 self._wait_for_mainpyfile = 0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000157 if self.bp_commands(frame):
158 self.interaction(frame, None)
159
160 def bp_commands(self,frame):
Georg Brandl3078df02009-05-05 09:11:31 +0000161 """Call every command that was set for the current active breakpoint
162 (if there is one).
163
164 Returns True if the normal interaction function must be called,
165 False otherwise."""
166 # self.currentbp is set in bdb in Bdb.break_here if a breakpoint was hit
167 if getattr(self, "currentbp", False) and \
168 self.currentbp in self.commands:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000169 currentbp = self.currentbp
170 self.currentbp = 0
171 lastcmd_back = self.lastcmd
172 self.setup(frame, None)
173 for line in self.commands[currentbp]:
174 self.onecmd(line)
175 self.lastcmd = lastcmd_back
176 if not self.commands_silent[currentbp]:
177 self.print_stack_entry(self.stack[self.curindex])
178 if self.commands_doprompt[currentbp]:
179 self.cmdloop()
180 self.forget()
181 return
182 return 1
Guido van Rossum9e1ee971997-07-11 13:43:53 +0000183
Tim Peters2344fae2001-01-15 00:50:52 +0000184 def user_return(self, frame, return_value):
185 """This function is called when a return trap is set here."""
Georg Brandl469d3e72010-08-01 19:35:16 +0000186 if self._wait_for_mainpyfile:
187 return
Tim Peters2344fae2001-01-15 00:50:52 +0000188 frame.f_locals['__return__'] = return_value
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000189 print('--Return--', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000190 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000191
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000192 def user_exception(self, frame, exc_info):
Tim Peters2344fae2001-01-15 00:50:52 +0000193 """This function is called if an exception occurs,
194 but only if we are to stop at or just below this level."""
Georg Brandl469d3e72010-08-01 19:35:16 +0000195 if self._wait_for_mainpyfile:
196 return
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000197 exc_type, exc_value, exc_traceback = exc_info
Tim Peters2344fae2001-01-15 00:50:52 +0000198 frame.f_locals['__exception__'] = exc_type, exc_value
Guido van Rossum1bc535d2007-05-15 18:46:22 +0000199 exc_type_name = exc_type.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000200 print(exc_type_name + ':', _saferepr(exc_value), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000201 self.interaction(frame, exc_traceback)
Guido van Rossum2424f851998-09-11 22:50:09 +0000202
Tim Peters2344fae2001-01-15 00:50:52 +0000203 # General interaction function
204
205 def interaction(self, frame, traceback):
206 self.setup(frame, traceback)
207 self.print_stack_entry(self.stack[self.curindex])
208 self.cmdloop()
209 self.forget()
210
Benjamin Petersond23f8222009-04-05 19:13:16 +0000211 def displayhook(self, obj):
212 """Custom displayhook for the exec in default(), which prevents
213 assignment of the _ variable in the builtins.
214 """
Georg Brandl22fff432009-10-27 20:19:02 +0000215 # reproduce the behavior of the standard displayhook, not printing None
216 if obj is not None:
217 print(repr(obj))
Benjamin Petersond23f8222009-04-05 19:13:16 +0000218
Tim Peters2344fae2001-01-15 00:50:52 +0000219 def default(self, line):
220 if line[:1] == '!': line = line[1:]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000221 locals = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000222 globals = self.curframe.f_globals
223 try:
224 code = compile(line + '\n', '<stdin>', 'single')
Christian Heimes679db4a2008-01-18 09:56:22 +0000225 save_stdout = sys.stdout
226 save_stdin = sys.stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000227 save_displayhook = sys.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000228 try:
229 sys.stdin = self.stdin
230 sys.stdout = self.stdout
Benjamin Petersond23f8222009-04-05 19:13:16 +0000231 sys.displayhook = self.displayhook
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000232 exec(code, globals, locals)
233 finally:
234 sys.stdout = save_stdout
235 sys.stdin = save_stdin
Benjamin Petersond23f8222009-04-05 19:13:16 +0000236 sys.displayhook = save_displayhook
Tim Peters2344fae2001-01-15 00:50:52 +0000237 except:
238 t, v = sys.exc_info()[:2]
239 if type(t) == type(''):
240 exc_type_name = t
241 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000242 print('***', exc_type_name + ':', v, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000243
244 def precmd(self, line):
245 """Handle alias expansion and ';;' separator."""
Guido van Rossum08454592002-07-12 13:10:53 +0000246 if not line.strip():
Tim Peters2344fae2001-01-15 00:50:52 +0000247 return line
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000248 args = line.split()
Raymond Hettinger54f02222002-06-01 14:18:47 +0000249 while args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000250 line = self.aliases[args[0]]
251 ii = 1
252 for tmpArg in args[1:]:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000253 line = line.replace("%" + str(ii),
Tim Peters2344fae2001-01-15 00:50:52 +0000254 tmpArg)
255 ii = ii + 1
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000256 line = line.replace("%*", ' '.join(args[1:]))
257 args = line.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000258 # split into ';;' separated commands
259 # unless it's an alias command
260 if args[0] != 'alias':
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000261 marker = line.find(';;')
Tim Peters2344fae2001-01-15 00:50:52 +0000262 if marker >= 0:
263 # queue up everything after marker
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000264 next = line[marker+2:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000265 self.cmdqueue.append(next)
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000266 line = line[:marker].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000267 return line
268
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000269 def onecmd(self, line):
270 """Interpret the argument as though it had been typed in response
271 to the prompt.
272
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000273 Checks whether this line is typed at the normal prompt or in
274 a breakpoint command list definition.
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000275 """
276 if not self.commands_defining:
277 return cmd.Cmd.onecmd(self, line)
278 else:
279 return self.handle_command_def(line)
280
281 def handle_command_def(self,line):
Georg Brandl469d3e72010-08-01 19:35:16 +0000282 """Handles one command line during command list definition."""
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000283 cmd, arg, line = self.parseline(line)
Georg Brandl469d3e72010-08-01 19:35:16 +0000284 if not cmd:
285 return
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000286 if cmd == 'silent':
287 self.commands_silent[self.commands_bnum] = True
288 return # continue to handle other cmd def in the cmd list
289 elif cmd == 'end':
290 self.cmdqueue = []
291 return 1 # end of cmd list
292 cmdlist = self.commands[self.commands_bnum]
Georg Brandl469d3e72010-08-01 19:35:16 +0000293 if arg:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000294 cmdlist.append(cmd+' '+arg)
295 else:
296 cmdlist.append(cmd)
297 # Determine if we must stop
298 try:
299 func = getattr(self, 'do_' + cmd)
300 except AttributeError:
301 func = self.default
Georg Brandl3078df02009-05-05 09:11:31 +0000302 # one of the resuming commands
303 if func.__name__ in self.commands_resuming:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000304 self.commands_doprompt[self.commands_bnum] = False
305 self.cmdqueue = []
306 return 1
307 return
308
Tim Peters2344fae2001-01-15 00:50:52 +0000309 # Command definitions, called by cmdloop()
310 # The argument is the remaining string on the command line
311 # Return true to exit from the command loop
312
313 do_h = cmd.Cmd.do_help
314
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000315 def do_commands(self, arg):
Georg Brandl3078df02009-05-05 09:11:31 +0000316 """Defines a list of commands associated to a breakpoint.
317
318 Those commands will be executed whenever the breakpoint causes
319 the program to stop execution."""
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000320 if not arg:
321 bnum = len(bdb.Breakpoint.bpbynumber)-1
322 else:
323 try:
324 bnum = int(arg)
325 except:
Georg Brandl3078df02009-05-05 09:11:31 +0000326 print("Usage : commands [bnum]\n ...\n end",
327 file=self.stdout)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000328 return
329 self.commands_bnum = bnum
330 self.commands[bnum] = []
331 self.commands_doprompt[bnum] = True
332 self.commands_silent[bnum] = False
333 prompt_back = self.prompt
334 self.prompt = '(com) '
335 self.commands_defining = True
Georg Brandl469d3e72010-08-01 19:35:16 +0000336 try:
337 self.cmdloop()
338 finally:
339 self.commands_defining = False
340 self.prompt = prompt_back
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000341
Tim Peters2344fae2001-01-15 00:50:52 +0000342 def do_break(self, arg, temporary = 0):
343 # break [ ([filename:]lineno | function) [, "condition"] ]
344 if not arg:
345 if self.breaks: # There's at least one
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000346 print("Num Type Disp Enb Where", file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000347 for bp in bdb.Breakpoint.bpbynumber:
348 if bp:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000349 bp.bpprint(self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000350 return
351 # parse arguments; comma has lowest precedence
352 # and cannot occur in filename
353 filename = None
354 lineno = None
355 cond = None
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000356 comma = arg.find(',')
Tim Peters2344fae2001-01-15 00:50:52 +0000357 if comma > 0:
358 # parse stuff after comma: "condition"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000359 cond = arg[comma+1:].lstrip()
360 arg = arg[:comma].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000361 # parse stuff before comma: [filename:]lineno | function
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000362 colon = arg.rfind(':')
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000363 funcname = None
Tim Peters2344fae2001-01-15 00:50:52 +0000364 if colon >= 0:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000365 filename = arg[:colon].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000366 f = self.lookupmodule(filename)
367 if not f:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000368 print('*** ', repr(filename), end=' ', file=self.stdout)
369 print('not found from sys.path', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000370 return
371 else:
372 filename = f
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000373 arg = arg[colon+1:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000374 try:
375 lineno = int(arg)
Guido van Rossumb940e112007-01-10 16:19:56 +0000376 except ValueError as msg:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000377 print('*** Bad lineno:', arg, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000378 return
379 else:
380 # no colon; can be lineno or function
381 try:
382 lineno = int(arg)
383 except ValueError:
384 try:
385 func = eval(arg,
386 self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +0000387 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000388 except:
389 func = arg
390 try:
Christian Heimesff737952007-11-27 10:40:20 +0000391 if hasattr(func, '__func__'):
392 func = func.__func__
Neal Norwitz221085d2007-02-25 20:55:47 +0000393 code = func.__code__
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000394 #use co_name to identify the bkpt (function names
395 #could be aliased, but co_name is invariant)
396 funcname = code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000397 lineno = code.co_firstlineno
398 filename = code.co_filename
399 except:
400 # last thing to try
401 (ok, filename, ln) = self.lineinfo(arg)
402 if not ok:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000403 print('*** The specified object', end=' ', file=self.stdout)
404 print(repr(arg), end=' ', file=self.stdout)
405 print('is not a function', file=self.stdout)
406 print('or was not found along sys.path.', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000407 return
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000408 funcname = ok # ok contains a function name
Tim Peters2344fae2001-01-15 00:50:52 +0000409 lineno = int(ln)
410 if not filename:
411 filename = self.defaultFile()
412 # Check for reasonable breakpoint
413 line = self.checkline(filename, lineno)
414 if line:
415 # now set the break point
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000416 err = self.set_break(filename, line, temporary, cond, funcname)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000417 if err: print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000418 else:
419 bp = self.get_breaks(filename, line)[-1]
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000420 print("Breakpoint %d at %s:%d" % (bp.number,
Thomas Wouters477c8d52006-05-27 19:21:47 +0000421 bp.file,
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000422 bp.line), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000423
424 # To be overridden in derived debuggers
425 def defaultFile(self):
426 """Produce a reasonable default."""
427 filename = self.curframe.f_code.co_filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000428 if filename == '<string>' and self.mainpyfile:
429 filename = self.mainpyfile
Tim Peters2344fae2001-01-15 00:50:52 +0000430 return filename
431
432 do_b = do_break
433
434 def do_tbreak(self, arg):
435 self.do_break(arg, 1)
436
437 def lineinfo(self, identifier):
438 failed = (None, None, None)
439 # Input is identifier, may be in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000440 idstring = identifier.split("'")
Tim Peters2344fae2001-01-15 00:50:52 +0000441 if len(idstring) == 1:
442 # not in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000443 id = idstring[0].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000444 elif len(idstring) == 3:
445 # quoted
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000446 id = idstring[1].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000447 else:
448 return failed
449 if id == '': return failed
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000450 parts = id.split('.')
Tim Peters2344fae2001-01-15 00:50:52 +0000451 # Protection for derived debuggers
452 if parts[0] == 'self':
453 del parts[0]
454 if len(parts) == 0:
455 return failed
456 # Best first guess at file to look at
457 fname = self.defaultFile()
458 if len(parts) == 1:
459 item = parts[0]
460 else:
461 # More than one part.
462 # First is module, second is method/class
463 f = self.lookupmodule(parts[0])
464 if f:
465 fname = f
466 item = parts[1]
467 answer = find_function(item, fname)
468 return answer or failed
469
470 def checkline(self, filename, lineno):
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000471 """Check whether specified line seems to be executable.
Tim Peters2344fae2001-01-15 00:50:52 +0000472
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000473 Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank
474 line or EOF). Warning: testing is not comprehensive.
475 """
Georg Brandl469d3e72010-08-01 19:35:16 +0000476 # this method should be callable before starting debugging, so default
477 # to "no globals" if there is no current frame
478 globs = self.curframe.f_globals if hasattr(self, 'curframe') else None
479 line = linecache.getline(filename, lineno, globs)
Tim Peters2344fae2001-01-15 00:50:52 +0000480 if not line:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000481 print('End of file', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000482 return 0
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000483 line = line.strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000484 # Don't allow setting breakpoint at a blank line
Guido van Rossum08454592002-07-12 13:10:53 +0000485 if (not line or (line[0] == '#') or
486 (line[:3] == '"""') or line[:3] == "'''"):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000487 print('*** Blank or comment', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000488 return 0
Tim Peters2344fae2001-01-15 00:50:52 +0000489 return lineno
490
491 def do_enable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000492 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000493 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000494 try:
495 i = int(i)
496 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000497 print('Breakpoint index %r is not a number' % i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000498 continue
499
500 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000501 print('No breakpoint numbered', i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000502 continue
503
504 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000505 if bp:
506 bp.enable()
507
508 def do_disable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000509 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000510 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000511 try:
512 i = int(i)
513 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000514 print('Breakpoint index %r is not a number' % i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000515 continue
Tim Petersf545baa2003-06-15 23:26:30 +0000516
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000517 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000518 print('No breakpoint numbered', i, file=self.stdout)
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000519 continue
520
521 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000522 if bp:
523 bp.disable()
524
525 def do_condition(self, arg):
526 # arg is breakpoint number and condition
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000527 args = arg.split(' ', 1)
Thomas Woutersb2137042007-02-01 18:02:27 +0000528 try:
529 bpnum = int(args[0].strip())
530 except ValueError:
531 # something went wrong
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000532 print('Breakpoint index %r is not a number' % args[0], file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000533 return
Tim Peters2344fae2001-01-15 00:50:52 +0000534 try:
535 cond = args[1]
536 except:
537 cond = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000538 try:
539 bp = bdb.Breakpoint.bpbynumber[bpnum]
540 except IndexError:
Neal Norwitz752abd02008-05-13 04:55:24 +0000541 print('Breakpoint index %r is not valid' % args[0],
542 file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000543 return
Tim Peters2344fae2001-01-15 00:50:52 +0000544 if bp:
545 bp.cond = cond
546 if not cond:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000547 print('Breakpoint', bpnum, end=' ', file=self.stdout)
548 print('is now unconditional.', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000549
550 def do_ignore(self,arg):
551 """arg is bp number followed by ignore count."""
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000552 args = arg.split()
Thomas Woutersb2137042007-02-01 18:02:27 +0000553 try:
554 bpnum = int(args[0].strip())
555 except ValueError:
556 # something went wrong
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000557 print('Breakpoint index %r is not a number' % args[0], file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000558 return
Tim Peters2344fae2001-01-15 00:50:52 +0000559 try:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000560 count = int(args[1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000561 except:
562 count = 0
Guido van Rossumd8faa362007-04-27 19:54:29 +0000563 try:
564 bp = bdb.Breakpoint.bpbynumber[bpnum]
565 except IndexError:
Neal Norwitz752abd02008-05-13 04:55:24 +0000566 print('Breakpoint index %r is not valid' % args[0],
567 file=self.stdout)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000568 return
Tim Peters2344fae2001-01-15 00:50:52 +0000569 if bp:
570 bp.ignore = count
Guido van Rossum08454592002-07-12 13:10:53 +0000571 if count > 0:
Tim Peters2344fae2001-01-15 00:50:52 +0000572 reply = 'Will ignore next '
Guido van Rossum08454592002-07-12 13:10:53 +0000573 if count > 1:
Tim Peters2344fae2001-01-15 00:50:52 +0000574 reply = reply + '%d crossings' % count
575 else:
576 reply = reply + '1 crossing'
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000577 print(reply + ' of breakpoint %d.' % bpnum, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000578 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000579 print('Will stop next time breakpoint', end=' ', file=self.stdout)
580 print(bpnum, 'is reached.', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000581
582 def do_clear(self, arg):
583 """Three possibilities, tried in this order:
584 clear -> clear all breaks, ask for confirmation
585 clear file:lineno -> clear all breaks at file:lineno
586 clear bpno bpno ... -> clear breakpoints by number"""
587 if not arg:
588 try:
Guido van Rossumc5b6ab02007-05-27 09:19:52 +0000589 reply = input('Clear all breaks? ')
Tim Peters2344fae2001-01-15 00:50:52 +0000590 except EOFError:
591 reply = 'no'
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000592 reply = reply.strip().lower()
Tim Peters2344fae2001-01-15 00:50:52 +0000593 if reply in ('y', 'yes'):
594 self.clear_all_breaks()
595 return
596 if ':' in arg:
597 # Make sure it works for "clear C:\foo\bar.py:12"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000598 i = arg.rfind(':')
Tim Peters2344fae2001-01-15 00:50:52 +0000599 filename = arg[:i]
600 arg = arg[i+1:]
601 try:
602 lineno = int(arg)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000603 except ValueError:
Tim Peters2344fae2001-01-15 00:50:52 +0000604 err = "Invalid line number (%s)" % arg
605 else:
606 err = self.clear_break(filename, lineno)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000607 if err: print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000608 return
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000609 numberlist = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000610 for i in numberlist:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000611 try:
612 i = int(i)
613 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000614 print('Breakpoint index %r is not a number' % i, file=self.stdout)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000615 continue
616
Georg Brandl6d2b3462005-08-24 07:36:17 +0000617 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000618 print('No breakpoint numbered', i, file=self.stdout)
Georg Brandl6d2b3462005-08-24 07:36:17 +0000619 continue
Tim Peters2344fae2001-01-15 00:50:52 +0000620 err = self.clear_bpbynumber(i)
621 if err:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000622 print('***', err, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000623 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000624 print('Deleted breakpoint', i, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000625 do_cl = do_clear # 'c' is already an abbreviation for 'continue'
626
627 def do_where(self, arg):
628 self.print_stack_trace()
629 do_w = do_where
Guido van Rossum6bd68352001-01-20 17:57:37 +0000630 do_bt = do_where
Tim Peters2344fae2001-01-15 00:50:52 +0000631
632 def do_up(self, arg):
633 if self.curindex == 0:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000634 print('*** Oldest frame', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000635 else:
636 self.curindex = self.curindex - 1
637 self.curframe = self.stack[self.curindex][0]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000638 self.curframe_locals = self.curframe.f_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000639 self.print_stack_entry(self.stack[self.curindex])
640 self.lineno = None
641 do_u = do_up
642
643 def do_down(self, arg):
644 if self.curindex + 1 == len(self.stack):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000645 print('*** Newest frame', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000646 else:
647 self.curindex = self.curindex + 1
648 self.curframe = self.stack[self.curindex][0]
Benjamin Petersond23f8222009-04-05 19:13:16 +0000649 self.curframe_locals = self.curframe.f_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000650 self.print_stack_entry(self.stack[self.curindex])
651 self.lineno = None
652 do_d = do_down
653
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000654 def do_until(self, arg):
655 self.set_until(self.curframe)
656 return 1
657 do_unt = do_until
658
Tim Peters2344fae2001-01-15 00:50:52 +0000659 def do_step(self, arg):
660 self.set_step()
661 return 1
662 do_s = do_step
663
664 def do_next(self, arg):
665 self.set_next(self.curframe)
666 return 1
667 do_n = do_next
668
Guido van Rossumd8faa362007-04-27 19:54:29 +0000669 def do_run(self, arg):
Georg Brandl3078df02009-05-05 09:11:31 +0000670 """Restart program by raising an exception to be caught in the main
671 debugger loop. If arguments were given, set them in sys.argv."""
Guido van Rossumd8faa362007-04-27 19:54:29 +0000672 if arg:
673 import shlex
674 argv0 = sys.argv[0:1]
675 sys.argv = shlex.split(arg)
676 sys.argv[:0] = argv0
677 raise Restart
678
679 do_restart = do_run
680
Tim Peters2344fae2001-01-15 00:50:52 +0000681 def do_return(self, arg):
682 self.set_return(self.curframe)
683 return 1
684 do_r = do_return
685
686 def do_continue(self, arg):
687 self.set_continue()
688 return 1
689 do_c = do_cont = do_continue
690
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000691 def do_jump(self, arg):
692 if self.curindex + 1 != len(self.stack):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000693 print("*** You can only jump within the bottom frame", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000694 return
695 try:
696 arg = int(arg)
697 except ValueError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000698 print("*** The 'jump' command requires a line number.", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000699 else:
700 try:
701 # Do the jump, fix up our copy of the stack, and display the
702 # new position
703 self.curframe.f_lineno = arg
704 self.stack[self.curindex] = self.stack[self.curindex][0], arg
705 self.print_stack_entry(self.stack[self.curindex])
Guido van Rossumb940e112007-01-10 16:19:56 +0000706 except ValueError as e:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000707 print('*** Jump failed:', e, file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000708 do_j = do_jump
709
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000710 def do_debug(self, arg):
711 sys.settrace(None)
712 globals = self.curframe.f_globals
Benjamin Petersond23f8222009-04-05 19:13:16 +0000713 locals = self.curframe_locals
Guido van Rossum7736b5b2008-01-15 21:44:53 +0000714 p = Pdb(self.completekey, self.stdin, self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000715 p.prompt = "(%s) " % self.prompt.strip()
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000716 print("ENTERING RECURSIVE DEBUGGER", file=self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000717 sys.call_tracing(p.run, (arg, globals, locals))
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000718 print("LEAVING RECURSIVE DEBUGGER", file=self.stdout)
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000719 sys.settrace(self.trace_dispatch)
720 self.lastcmd = p.lastcmd
721
Tim Peters2344fae2001-01-15 00:50:52 +0000722 def do_quit(self, arg):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000723 self._user_requested_quit = 1
Tim Peters2344fae2001-01-15 00:50:52 +0000724 self.set_quit()
725 return 1
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000726
Tim Peters2344fae2001-01-15 00:50:52 +0000727 do_q = do_quit
Guido van Rossumd1c08f32002-04-15 00:48:24 +0000728 do_exit = do_quit
Tim Peters2344fae2001-01-15 00:50:52 +0000729
Guido van Rossumeef26072003-01-13 21:13:55 +0000730 def do_EOF(self, arg):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000731 print(file=self.stdout)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000732 self._user_requested_quit = 1
Guido van Rossumeef26072003-01-13 21:13:55 +0000733 self.set_quit()
734 return 1
735
Tim Peters2344fae2001-01-15 00:50:52 +0000736 def do_args(self, arg):
Benjamin Petersond23f8222009-04-05 19:13:16 +0000737 co = self.curframe.f_code
738 dict = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000739 n = co.co_argcount
740 if co.co_flags & 4: n = n+1
741 if co.co_flags & 8: n = n+1
742 for i in range(n):
743 name = co.co_varnames[i]
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000744 print(name, '=', end=' ', file=self.stdout)
745 if name in dict: print(dict[name], file=self.stdout)
746 else: print("*** undefined ***", file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000747 do_a = do_args
Guido van Rossum2424f851998-09-11 22:50:09 +0000748
Tim Peters2344fae2001-01-15 00:50:52 +0000749 def do_retval(self, arg):
Benjamin Petersond23f8222009-04-05 19:13:16 +0000750 if '__return__' in self.curframe_locals:
751 print(self.curframe_locals['__return__'], file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000752 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000753 print('*** Not yet returned!', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000754 do_rv = do_retval
Guido van Rossum2424f851998-09-11 22:50:09 +0000755
Barry Warsaw210bd202002-11-05 22:40:20 +0000756 def _getval(self, arg):
Tim Peters2344fae2001-01-15 00:50:52 +0000757 try:
Benjamin Petersond23f8222009-04-05 19:13:16 +0000758 return eval(arg, self.curframe.f_globals, self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000759 except:
760 t, v = sys.exc_info()[:2]
Barry Warsaw210bd202002-11-05 22:40:20 +0000761 if isinstance(t, str):
Tim Peters2344fae2001-01-15 00:50:52 +0000762 exc_type_name = t
763 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000764 print('***', exc_type_name + ':', repr(v), file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +0000765 raise
Guido van Rossum2424f851998-09-11 22:50:09 +0000766
Barry Warsaw210bd202002-11-05 22:40:20 +0000767 def do_p(self, arg):
768 try:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000769 print(repr(self._getval(arg)), file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +0000770 except:
771 pass
Georg Brandlc9879242007-09-04 07:07:56 +0000772 # make "print" an alias of "p" since print isn't a Python statement anymore
773 do_print = do_p
Barry Warsaw210bd202002-11-05 22:40:20 +0000774
775 def do_pp(self, arg):
776 try:
Thomas Wouters477c8d52006-05-27 19:21:47 +0000777 pprint.pprint(self._getval(arg), self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +0000778 except:
779 pass
Guido van Rossum2424f851998-09-11 22:50:09 +0000780
Tim Peters2344fae2001-01-15 00:50:52 +0000781 def do_list(self, arg):
782 self.lastcmd = 'list'
783 last = None
784 if arg:
785 try:
786 x = eval(arg, {}, {})
787 if type(x) == type(()):
788 first, last = x
789 first = int(first)
790 last = int(last)
791 if last < first:
792 # Assume it's a count
793 last = first + last
794 else:
795 first = max(1, int(x) - 5)
796 except:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000797 print('*** Error in argument:', repr(arg), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000798 return
799 elif self.lineno is None:
800 first = max(1, self.curframe.f_lineno - 5)
801 else:
802 first = self.lineno + 1
803 if last is None:
804 last = first + 10
805 filename = self.curframe.f_code.co_filename
806 breaklist = self.get_file_breaks(filename)
807 try:
808 for lineno in range(first, last+1):
Georg Brandl3078df02009-05-05 09:11:31 +0000809 line = linecache.getline(filename, lineno,
810 self.curframe.f_globals)
Tim Peters2344fae2001-01-15 00:50:52 +0000811 if not line:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000812 print('[EOF]', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000813 break
814 else:
Walter Dörwald70a6b492004-02-12 17:35:32 +0000815 s = repr(lineno).rjust(3)
Tim Peters2344fae2001-01-15 00:50:52 +0000816 if len(s) < 4: s = s + ' '
817 if lineno in breaklist: s = s + 'B'
818 else: s = s + ' '
819 if lineno == self.curframe.f_lineno:
820 s = s + '->'
Guido van Rossumceae3752007-02-09 22:16:54 +0000821 print(s + '\t' + line, end='', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000822 self.lineno = lineno
823 except KeyboardInterrupt:
824 pass
825 do_l = do_list
Guido van Rossum2424f851998-09-11 22:50:09 +0000826
Tim Peters2344fae2001-01-15 00:50:52 +0000827 def do_whatis(self, arg):
828 try:
829 value = eval(arg, self.curframe.f_globals,
Benjamin Petersond23f8222009-04-05 19:13:16 +0000830 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000831 except:
832 t, v = sys.exc_info()[:2]
833 if type(t) == type(''):
834 exc_type_name = t
835 else: exc_type_name = t.__name__
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000836 print('***', exc_type_name + ':', repr(v), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000837 return
838 code = None
839 # Is it a function?
Neal Norwitz221085d2007-02-25 20:55:47 +0000840 try: code = value.__code__
Tim Peters2344fae2001-01-15 00:50:52 +0000841 except: pass
842 if code:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000843 print('Function', code.co_name, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000844 return
845 # Is it an instance method?
Christian Heimesff737952007-11-27 10:40:20 +0000846 try: code = value.__func__.__code__
Tim Peters2344fae2001-01-15 00:50:52 +0000847 except: pass
848 if code:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000849 print('Method', code.co_name, file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000850 return
851 # None of the above...
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000852 print(type(value), file=self.stdout)
Guido van Rossum8e2ec561993-07-29 09:37:38 +0000853
Tim Peters2344fae2001-01-15 00:50:52 +0000854 def do_alias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000855 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000856 if len(args) == 0:
Benjamin Peterson14f9f7d2009-09-11 21:21:12 +0000857 keys = sorted(self.aliases.keys())
Tim Peters2344fae2001-01-15 00:50:52 +0000858 for alias in keys:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000859 print("%s = %s" % (alias, self.aliases[alias]), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000860 return
Guido van Rossum08454592002-07-12 13:10:53 +0000861 if args[0] in self.aliases and len(args) == 1:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000862 print("%s = %s" % (args[0], self.aliases[args[0]]), file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000863 else:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000864 self.aliases[args[0]] = ' '.join(args[1:])
Guido van Rossum23efba41992-01-27 16:58:47 +0000865
Tim Peters2344fae2001-01-15 00:50:52 +0000866 def do_unalias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000867 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000868 if len(args) == 0: return
Raymond Hettinger54f02222002-06-01 14:18:47 +0000869 if args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000870 del self.aliases[args[0]]
Guido van Rossum00230781993-03-29 11:39:45 +0000871
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000872 #list of all the commands making the program resume execution.
Thomas Wouters477c8d52006-05-27 19:21:47 +0000873 commands_resuming = ['do_continue', 'do_step', 'do_next', 'do_return',
874 'do_quit', 'do_jump']
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000875
Tim Peters2344fae2001-01-15 00:50:52 +0000876 # Print a traceback starting at the top stack frame.
877 # The most recently entered frame is printed last;
878 # this is different from dbx and gdb, but consistent with
879 # the Python interpreter's stack trace.
880 # It is also consistent with the up/down commands (which are
881 # compatible with dbx and gdb: up moves towards 'main()'
882 # and down moves towards the most recent stack frame).
Guido van Rossum2424f851998-09-11 22:50:09 +0000883
Tim Peters2344fae2001-01-15 00:50:52 +0000884 def print_stack_trace(self):
885 try:
886 for frame_lineno in self.stack:
887 self.print_stack_entry(frame_lineno)
888 except KeyboardInterrupt:
889 pass
Guido van Rossum2424f851998-09-11 22:50:09 +0000890
Tim Peters2344fae2001-01-15 00:50:52 +0000891 def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix):
892 frame, lineno = frame_lineno
893 if frame is self.curframe:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000894 print('>', end=' ', file=self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000895 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000896 print(' ', end=' ', file=self.stdout)
897 print(self.format_stack_entry(frame_lineno,
898 prompt_prefix), file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +0000899
Guido van Rossum921c8241992-01-10 14:54:42 +0000900
Tim Peters2344fae2001-01-15 00:50:52 +0000901 # Help methods (derived from pdb.doc)
Guido van Rossum921c8241992-01-10 14:54:42 +0000902
Tim Peters2344fae2001-01-15 00:50:52 +0000903 def help_help(self):
904 self.help_h()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000905
Tim Peters2344fae2001-01-15 00:50:52 +0000906 def help_h(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000907 print("""h(elp)
Tim Peters2344fae2001-01-15 00:50:52 +0000908Without argument, print the list of available commands.
909With a command name as argument, print help about that command
910"help pdb" pipes the full documentation file to the $PAGER
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000911"help exec" gives help on the ! command""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +0000912
Tim Peters2344fae2001-01-15 00:50:52 +0000913 def help_where(self):
914 self.help_w()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000915
Tim Peters2344fae2001-01-15 00:50:52 +0000916 def help_w(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000917 print("""w(here)
Tim Peters2344fae2001-01-15 00:50:52 +0000918Print a stack trace, with the most recent frame at the bottom.
919An arrow indicates the "current frame", which determines the
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000920context of most commands. 'bt' is an alias for this command.""", file=self.stdout)
Guido van Rossum6bd68352001-01-20 17:57:37 +0000921
922 help_bt = help_w
Guido van Rossumb6775db1994-08-01 11:34:53 +0000923
Tim Peters2344fae2001-01-15 00:50:52 +0000924 def help_down(self):
925 self.help_d()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000926
Tim Peters2344fae2001-01-15 00:50:52 +0000927 def help_d(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000928 print("""d(own)
Tim Peters2344fae2001-01-15 00:50:52 +0000929Move the current frame one level down in the stack trace
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000930(to a newer frame).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +0000931
Tim Peters2344fae2001-01-15 00:50:52 +0000932 def help_up(self):
933 self.help_u()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000934
Tim Peters2344fae2001-01-15 00:50:52 +0000935 def help_u(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000936 print("""u(p)
Tim Peters2344fae2001-01-15 00:50:52 +0000937Move the current frame one level up in the stack trace
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000938(to an older frame).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +0000939
Tim Peters2344fae2001-01-15 00:50:52 +0000940 def help_break(self):
941 self.help_b()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000942
Tim Peters2344fae2001-01-15 00:50:52 +0000943 def help_b(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000944 print("""b(reak) ([file:]lineno | function) [, condition]
Tim Peters2344fae2001-01-15 00:50:52 +0000945With a line number argument, set a break there in the current
946file. With a function name, set a break at first executable line
947of that function. Without argument, list all breaks. If a second
948argument is present, it is a string specifying an expression
949which must evaluate to true before the breakpoint is honored.
Guido van Rossumb6775db1994-08-01 11:34:53 +0000950
Tim Peters2344fae2001-01-15 00:50:52 +0000951The line number may be prefixed with a filename and a colon,
952to specify a breakpoint in another file (probably one that
953hasn't been loaded yet). The file is searched for on sys.path;
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000954the .py suffix may be omitted.""", file=self.stdout)
Guido van Rossumb5699c71998-07-20 23:13:54 +0000955
Tim Peters2344fae2001-01-15 00:50:52 +0000956 def help_clear(self):
957 self.help_cl()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000958
Tim Peters2344fae2001-01-15 00:50:52 +0000959 def help_cl(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000960 print("cl(ear) filename:lineno", file=self.stdout)
961 print("""cl(ear) [bpnumber [bpnumber...]]
Tim Peters2344fae2001-01-15 00:50:52 +0000962With a space separated list of breakpoint numbers, clear
963those breakpoints. Without argument, clear all breaks (but
964first ask confirmation). With a filename:lineno argument,
Georg Brandld348b252008-01-05 20:00:55 +0000965clear all breaks at that line in that file.""", file=self.stdout)
Guido van Rossumb5699c71998-07-20 23:13:54 +0000966
Tim Peters2344fae2001-01-15 00:50:52 +0000967 def help_tbreak(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000968 print("""tbreak same arguments as break, but breakpoint is
969removed when first hit.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +0000970
Tim Peters2344fae2001-01-15 00:50:52 +0000971 def help_enable(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000972 print("""enable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +0000973Enables the breakpoints given as a space separated list of
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000974bp numbers.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +0000975
Tim Peters2344fae2001-01-15 00:50:52 +0000976 def help_disable(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000977 print("""disable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +0000978Disables the breakpoints given as a space separated list of
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000979bp numbers.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +0000980
Tim Peters2344fae2001-01-15 00:50:52 +0000981 def help_ignore(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000982 print("""ignore bpnumber count
Tim Peters2344fae2001-01-15 00:50:52 +0000983Sets the ignore count for the given breakpoint number. A breakpoint
984becomes active when the ignore count is zero. When non-zero, the
985count is decremented each time the breakpoint is reached and the
986breakpoint is not disabled and any associated condition evaluates
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000987to true.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +0000988
Tim Peters2344fae2001-01-15 00:50:52 +0000989 def help_condition(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000990 print("""condition bpnumber str_condition
Tim Peters2344fae2001-01-15 00:50:52 +0000991str_condition is a string specifying an expression which
992must evaluate to true before the breakpoint is honored.
993If str_condition is absent, any existing condition is removed;
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000994i.e., the breakpoint is made unconditional.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +0000995
Tim Peters2344fae2001-01-15 00:50:52 +0000996 def help_step(self):
997 self.help_s()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000998
Tim Peters2344fae2001-01-15 00:50:52 +0000999 def help_s(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001000 print("""s(tep)
Tim Peters2344fae2001-01-15 00:50:52 +00001001Execute the current line, stop at the first possible occasion
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001002(either in a function that is called or in the current function).""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001003
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +00001004 def help_until(self):
1005 self.help_unt()
1006
1007 def help_unt(self):
1008 print("""unt(il)
1009Continue execution until the line with a number greater than the current
1010one is reached or until the current frame returns""")
1011
Tim Peters2344fae2001-01-15 00:50:52 +00001012 def help_next(self):
1013 self.help_n()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001014
Tim Peters2344fae2001-01-15 00:50:52 +00001015 def help_n(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001016 print("""n(ext)
Tim Peters2344fae2001-01-15 00:50:52 +00001017Continue execution until the next line in the current function
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001018is reached or it returns.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001019
Tim Peters2344fae2001-01-15 00:50:52 +00001020 def help_return(self):
1021 self.help_r()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001022
Tim Peters2344fae2001-01-15 00:50:52 +00001023 def help_r(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001024 print("""r(eturn)
1025Continue execution until the current function returns.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001026
Tim Peters2344fae2001-01-15 00:50:52 +00001027 def help_continue(self):
1028 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001029
Tim Peters2344fae2001-01-15 00:50:52 +00001030 def help_cont(self):
1031 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001032
Tim Peters2344fae2001-01-15 00:50:52 +00001033 def help_c(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001034 print("""c(ont(inue))
1035Continue execution, only stop when a breakpoint is encountered.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001036
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001037 def help_jump(self):
1038 self.help_j()
1039
1040 def help_j(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001041 print("""j(ump) lineno
1042Set the next line that will be executed.""", file=self.stdout)
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001043
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001044 def help_debug(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001045 print("""debug code
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001046Enter a recursive debugger that steps through the code argument
1047(which is an arbitrary expression or statement to be executed
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001048in the current environment).""", file=self.stdout)
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001049
Tim Peters2344fae2001-01-15 00:50:52 +00001050 def help_list(self):
1051 self.help_l()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001052
Tim Peters2344fae2001-01-15 00:50:52 +00001053 def help_l(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001054 print("""l(ist) [first [,last]]
Tim Peters2344fae2001-01-15 00:50:52 +00001055List source code for the current file.
1056Without arguments, list 11 lines around the current line
1057or continue the previous listing.
1058With one argument, list 11 lines starting at that line.
1059With two arguments, list the given range;
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001060if the second argument is less than the first, it is a count.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001061
Tim Peters2344fae2001-01-15 00:50:52 +00001062 def help_args(self):
1063 self.help_a()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001064
Tim Peters2344fae2001-01-15 00:50:52 +00001065 def help_a(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001066 print("""a(rgs)
1067Print the arguments of the current function.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001068
Tim Peters2344fae2001-01-15 00:50:52 +00001069 def help_p(self):
Georg Brandlc9879242007-09-04 07:07:56 +00001070 print("""p(rint) expression
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001071Print the value of the expression.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001072
Barry Warsaw210bd202002-11-05 22:40:20 +00001073 def help_pp(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001074 print("""pp expression
1075Pretty-print the value of the expression.""", file=self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +00001076
Tim Peters2344fae2001-01-15 00:50:52 +00001077 def help_exec(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001078 print("""(!) statement
Tim Peters2344fae2001-01-15 00:50:52 +00001079Execute the (one-line) statement in the context of
1080the current stack frame.
1081The exclamation point can be omitted unless the first word
1082of the statement resembles a debugger command.
1083To assign to a global variable you must always prefix the
1084command with a 'global' command, e.g.:
1085(Pdb) global list_options; list_options = ['-l']
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001086(Pdb)""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001087
Guido van Rossumd8faa362007-04-27 19:54:29 +00001088 def help_run(self):
1089 print("""run [args...]
1090Restart the debugged python program. If a string is supplied, it is
1091splitted with "shlex" and the result is used as the new sys.argv.
1092History, breakpoints, actions and debugger options are preserved.
1093"restart" is an alias for "run".""")
1094
1095 help_restart = help_run
1096
Tim Peters2344fae2001-01-15 00:50:52 +00001097 def help_quit(self):
1098 self.help_q()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001099
Tim Peters2344fae2001-01-15 00:50:52 +00001100 def help_q(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001101 print("""q(uit) or exit - Quit from the debugger.
1102The program being executed is aborted.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001103
Guido van Rossumd1c08f32002-04-15 00:48:24 +00001104 help_exit = help_q
1105
Tim Peters2344fae2001-01-15 00:50:52 +00001106 def help_whatis(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001107 print("""whatis arg
1108Prints the type of the argument.""", file=self.stdout)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001109
Tim Peters2344fae2001-01-15 00:50:52 +00001110 def help_EOF(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001111 print("""EOF
1112Handles the receipt of EOF as a command.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001113
Tim Peters2344fae2001-01-15 00:50:52 +00001114 def help_alias(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001115 print("""alias [name [command [parameter parameter ...] ]]
Tim Peters2344fae2001-01-15 00:50:52 +00001116Creates an alias called 'name' the executes 'command'. The command
1117must *not* be enclosed in quotes. Replaceable parameters are
1118indicated by %1, %2, and so on, while %* is replaced by all the
1119parameters. If no command is given, the current alias for name
1120is shown. If no name is given, all aliases are listed.
Guido van Rossum2424f851998-09-11 22:50:09 +00001121
Tim Peters2344fae2001-01-15 00:50:52 +00001122Aliases may be nested and can contain anything that can be
1123legally typed at the pdb prompt. Note! You *can* override
1124internal pdb commands with aliases! Those internal commands
1125are then hidden until the alias is removed. Aliasing is recursively
1126applied to the first word of the command line; all other words
1127in the line are left alone.
Guido van Rossum2424f851998-09-11 22:50:09 +00001128
Tim Peters2344fae2001-01-15 00:50:52 +00001129Some useful aliases (especially when placed in the .pdbrc file) are:
Guido van Rossum2424f851998-09-11 22:50:09 +00001130
Tim Peters2344fae2001-01-15 00:50:52 +00001131#Print instance variables (usage "pi classInst")
1132alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
Guido van Rossum2424f851998-09-11 22:50:09 +00001133
Tim Peters2344fae2001-01-15 00:50:52 +00001134#Print instance variables in self
1135alias ps pi self
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001136""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001137
Tim Peters2344fae2001-01-15 00:50:52 +00001138 def help_unalias(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001139 print("""unalias name
1140Deletes the specified alias.""", file=self.stdout)
Guido van Rossum2424f851998-09-11 22:50:09 +00001141
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001142 def help_commands(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001143 print("""commands [bpnumber]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001144(com) ...
1145(com) end
1146(Pdb)
1147
1148Specify a list of commands for breakpoint number bpnumber. The
1149commands themselves appear on the following lines. Type a line
1150containing just 'end' to terminate the commands.
1151
1152To remove all commands from a breakpoint, type commands and
1153follow it immediately with end; that is, give no commands.
1154
1155With no bpnumber argument, commands refers to the last
1156breakpoint set.
1157
1158You can use breakpoint commands to start your program up again.
1159Simply use the continue command, or step, or any other
1160command that resumes execution.
1161
1162Specifying any command resuming execution (currently continue,
1163step, next, return, jump, quit and their abbreviations) terminates
1164the command list (as if that command was immediately followed by end).
1165This is because any time you resume execution
1166(even with a simple next or step), you may encounter
1167another breakpoint--which could have its own command list, leading to
1168ambiguities about which list to execute.
1169
1170 If you use the 'silent' command in the command list, the
1171usual message about stopping at a breakpoint is not printed. This may
1172be desirable for breakpoints that are to print a specific message and
1173then continue. If none of the other commands print anything, you
1174see no sign that the breakpoint was reached.
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001175""", file=self.stdout)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001176
Tim Peters2344fae2001-01-15 00:50:52 +00001177 def help_pdb(self):
1178 help()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001179
Tim Peters2344fae2001-01-15 00:50:52 +00001180 def lookupmodule(self, filename):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001181 """Helper function for break/clear parsing -- may be overridden.
1182
1183 lookupmodule() translates (possibly incomplete) file or module name
1184 into an absolute file name.
1185 """
1186 if os.path.isabs(filename) and os.path.exists(filename):
Tim Peterse718f612004-10-12 21:51:32 +00001187 return filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001188 f = os.path.join(sys.path[0], filename)
1189 if os.path.exists(f) and self.canonic(f) == self.mainpyfile:
1190 return f
Tim Peters2344fae2001-01-15 00:50:52 +00001191 root, ext = os.path.splitext(filename)
1192 if ext == '':
1193 filename = filename + '.py'
1194 if os.path.isabs(filename):
1195 return filename
1196 for dirname in sys.path:
1197 while os.path.islink(dirname):
1198 dirname = os.readlink(dirname)
1199 fullname = os.path.join(dirname, filename)
1200 if os.path.exists(fullname):
1201 return fullname
1202 return None
Guido van Rossumb5699c71998-07-20 23:13:54 +00001203
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001204 def _runscript(self, filename):
Guido van Rossumd8faa362007-04-27 19:54:29 +00001205 # The script has to run in __main__ namespace (or imports from
1206 # __main__ will break).
1207 #
1208 # So we clear up the __main__ and set several special variables
1209 # (this gets rid of pdb's globals and cleans old variables on restarts).
1210 import __main__
1211 __main__.__dict__.clear()
1212 __main__.__dict__.update({"__name__" : "__main__",
1213 "__file__" : filename,
1214 "__builtins__": __builtins__,
1215 })
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001216
1217 # When bdb sets tracing, a number of call and line events happens
1218 # BEFORE debugger even reaches user's code (and the exact sequence of
1219 # events depends on python version). So we take special measures to
1220 # avoid stopping before we reach the main script (see user_line and
1221 # user_call for details).
1222 self._wait_for_mainpyfile = 1
1223 self.mainpyfile = self.canonic(filename)
1224 self._user_requested_quit = 0
Georg Brandl8a038b22009-08-13 07:52:08 +00001225 with open(filename, "rb") as fp:
1226 statement = "exec(compile(%r, %r, 'exec'))" % \
1227 (fp.read(), self.mainpyfile)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001228 self.run(statement)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001229
Guido van Rossum35771131992-09-08 11:59:04 +00001230# Simplified interface
1231
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001232def run(statement, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001233 Pdb().run(statement, globals, locals)
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001234
1235def runeval(expression, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001236 return Pdb().runeval(expression, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001237
1238def runctx(statement, globals, locals):
Tim Peters2344fae2001-01-15 00:50:52 +00001239 # B/W compatibility
1240 run(statement, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001241
Raymond Hettinger2ef7e6c2004-10-24 00:32:24 +00001242def runcall(*args, **kwds):
1243 return Pdb().runcall(*args, **kwds)
Guido van Rossum4e160981992-09-02 20:43:20 +00001244
Guido van Rossumb6775db1994-08-01 11:34:53 +00001245def set_trace():
Johannes Gijsbers84a6c202004-11-07 11:35:30 +00001246 Pdb().set_trace(sys._getframe().f_back)
Guido van Rossum35771131992-09-08 11:59:04 +00001247
1248# Post-Mortem interface
1249
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001250def post_mortem(t=None):
1251 # handling the default
1252 if t is None:
1253 # sys.exc_info() returns (type, value, traceback) if an exception is
1254 # being handled, otherwise it returns None
1255 t = sys.exc_info()[2]
1256 if t is None:
1257 raise ValueError("A valid traceback must be passed if no "
1258 "exception is being handled")
1259
Tim Peters2344fae2001-01-15 00:50:52 +00001260 p = Pdb()
1261 p.reset()
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001262 p.interaction(None, t)
Guido van Rossum35771131992-09-08 11:59:04 +00001263
1264def pm():
Tim Peters2344fae2001-01-15 00:50:52 +00001265 post_mortem(sys.last_traceback)
Guido van Rossum35771131992-09-08 11:59:04 +00001266
1267
1268# Main program for testing
1269
Guido van Rossum23efba41992-01-27 16:58:47 +00001270TESTCMD = 'import x; x.main()'
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001271
Guido van Rossum921c8241992-01-10 14:54:42 +00001272def test():
Tim Peters2344fae2001-01-15 00:50:52 +00001273 run(TESTCMD)
Guido van Rossume61fa0a1993-10-22 13:56:35 +00001274
1275# print help
1276def help():
Tim Peters2344fae2001-01-15 00:50:52 +00001277 for dirname in sys.path:
1278 fullname = os.path.join(dirname, 'pdb.doc')
1279 if os.path.exists(fullname):
1280 sts = os.system('${PAGER-more} '+fullname)
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001281 if sts: print('*** Pager exit status:', sts)
Tim Peters2344fae2001-01-15 00:50:52 +00001282 break
1283 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001284 print('Sorry, can\'t find the help file "pdb.doc"', end=' ')
1285 print('along the Python search path')
Guido van Rossumf17361d1996-07-30 16:28:13 +00001286
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001287def main():
Christian Heimesf6cd9672008-03-26 13:45:42 +00001288 if not sys.argv[1:] or sys.argv[1] in ("--help", "-h"):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001289 print("usage: pdb.py scriptfile [arg] ...")
Tim Peters2344fae2001-01-15 00:50:52 +00001290 sys.exit(2)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001291
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001292 mainpyfile = sys.argv[1] # Get script filename
1293 if not os.path.exists(mainpyfile):
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001294 print('Error:', mainpyfile, 'does not exist')
Tim Peters2344fae2001-01-15 00:50:52 +00001295 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001296
Tim Peters2344fae2001-01-15 00:50:52 +00001297 del sys.argv[0] # Hide "pdb.py" from argument list
Guido van Rossumec577d51996-09-10 17:39:34 +00001298
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001299 # Replace pdb's dir with script's dir in front of module search path.
1300 sys.path[0] = os.path.dirname(mainpyfile)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001301
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001302 # Note on saving/restoring sys.argv: it's a good idea when sys.argv was
1303 # modified by the script being debugged. It's a bad idea when it was
Georg Brandl3078df02009-05-05 09:11:31 +00001304 # changed by the user from the command line. There is a "restart" command
1305 # which allows explicit specification of command line arguments.
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001306 pdb = Pdb()
Georg Brandl469d3e72010-08-01 19:35:16 +00001307 while True:
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001308 try:
1309 pdb._runscript(mainpyfile)
1310 if pdb._user_requested_quit:
1311 break
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001312 print("The program finished and will be restarted")
Guido van Rossumd8faa362007-04-27 19:54:29 +00001313 except Restart:
1314 print("Restarting", mainpyfile, "with arguments:")
1315 print("\t" + " ".join(sys.argv[1:]))
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001316 except SystemExit:
1317 # In most cases SystemExit does not warrant a post-mortem session.
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001318 print("The program exited via sys.exit(). Exit status: ", end=' ')
1319 print(sys.exc_info()[1])
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001320 except:
1321 traceback.print_exc()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001322 print("Uncaught exception. Entering post mortem debugging")
1323 print("Running 'cont' or 'step' will restart the program")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001324 t = sys.exc_info()[2]
Benjamin Peterson1a6e0d02008-10-25 15:49:17 +00001325 pdb.interaction(None, t)
Georg Brandl3078df02009-05-05 09:11:31 +00001326 print("Post mortem debugger finished. The " + mainpyfile +
1327 " will be restarted")
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001328
1329
1330# When invoked as main program, invoke the debugger on a script
Guido van Rossumd8faa362007-04-27 19:54:29 +00001331if __name__ == '__main__':
1332 import pdb
1333 pdb.main()