blob: 4d35103b90b694235836fc211556ce3b0161caa6 [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
Brett Cannon2ee0e8e2008-05-23 05:03:59 +000011from repr 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
Georg Brandl8e84c652007-03-13 21:08:15 +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):
Andrew M. Kuchlinge6728252006-09-05 13:19:18 +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 Brandl4d4313d2009-05-05 08:54:11 +000061 def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None):
62 bdb.Bdb.__init__(self, skip=skip)
Georg Brandl19564802006-05-10 17:13:20 +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
Martin v. Löwisbd30f522006-04-17 17:08:37 +000097 self.commands = {} # associates a command list to breakpoint numbers
Georg Brandle361bcb2009-04-01 23:32:17 +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
Martin v. Löwisbd30f522006-04-17 17:08:37 +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]
Georg Brandle361bcb2009-04-01 23:32:17 +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):
Georg Brandl19564802006-05-10 17:13:20 +0000147 print >>self.stdout, '--Call--'
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
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000157 if self.bp_commands(frame):
158 self.interaction(frame, None)
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000159
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000160 def bp_commands(self,frame):
Georg Brandl58152202009-05-05 09:06:02 +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:
Martin v. Löwisbd30f522006-04-17 17:08:37 +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]:
Gregory P. Smith860852f2010-05-09 01:20:20 +0000179 self.cmdloop()
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000180 self.forget()
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000181 return
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000182 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 Brandl50775992010-08-01 19:33:15 +0000186 if self._wait_for_mainpyfile:
187 return
Tim Peters2344fae2001-01-15 00:50:52 +0000188 frame.f_locals['__return__'] = return_value
Georg Brandl19564802006-05-10 17:13:20 +0000189 print >>self.stdout, '--Return--'
Tim Peters2344fae2001-01-15 00:50:52 +0000190 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000191
Brett Cannonc6a30ec2008-08-01 01:36:47 +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 Brandl50775992010-08-01 19:33:15 +0000195 if self._wait_for_mainpyfile:
196 return
197 exc_type, exc_value, exc_traceback = exc_info
Tim Peters2344fae2001-01-15 00:50:52 +0000198 frame.f_locals['__exception__'] = exc_type, exc_value
199 if type(exc_type) == type(''):
200 exc_type_name = exc_type
201 else: exc_type_name = exc_type.__name__
Georg Brandl19564802006-05-10 17:13:20 +0000202 print >>self.stdout, exc_type_name + ':', _saferepr(exc_value)
Tim Peters2344fae2001-01-15 00:50:52 +0000203 self.interaction(frame, exc_traceback)
Guido van Rossum2424f851998-09-11 22:50:09 +0000204
Tim Peters2344fae2001-01-15 00:50:52 +0000205 # General interaction function
206
207 def interaction(self, frame, traceback):
208 self.setup(frame, traceback)
209 self.print_stack_entry(self.stack[self.curindex])
Gregory P. Smith860852f2010-05-09 01:20:20 +0000210 self.cmdloop()
Tim Peters2344fae2001-01-15 00:50:52 +0000211 self.forget()
212
Georg Brandl58b8b952009-04-01 21:54:21 +0000213 def displayhook(self, obj):
214 """Custom displayhook for the exec in default(), which prevents
215 assignment of the _ variable in the builtins.
216 """
Georg Brandl69dfe8d2009-09-16 16:36:39 +0000217 # reproduce the behavior of the standard displayhook, not printing None
218 if obj is not None:
219 print repr(obj)
Georg Brandl58b8b952009-04-01 21:54:21 +0000220
Tim Peters2344fae2001-01-15 00:50:52 +0000221 def default(self, line):
222 if line[:1] == '!': line = line[1:]
Georg Brandle361bcb2009-04-01 23:32:17 +0000223 locals = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000224 globals = self.curframe.f_globals
225 try:
226 code = compile(line + '\n', '<stdin>', 'single')
Amaury Forgeot d'Arcff0f2672008-01-15 21:25:11 +0000227 save_stdout = sys.stdout
228 save_stdin = sys.stdin
Georg Brandl58b8b952009-04-01 21:54:21 +0000229 save_displayhook = sys.displayhook
Guido van Rossumcad37242008-01-15 17:59:29 +0000230 try:
231 sys.stdin = self.stdin
232 sys.stdout = self.stdout
Georg Brandl58b8b952009-04-01 21:54:21 +0000233 sys.displayhook = self.displayhook
Guido van Rossumcad37242008-01-15 17:59:29 +0000234 exec code in globals, locals
235 finally:
236 sys.stdout = save_stdout
237 sys.stdin = save_stdin
Georg Brandl58b8b952009-04-01 21:54:21 +0000238 sys.displayhook = save_displayhook
Tim Peters2344fae2001-01-15 00:50:52 +0000239 except:
240 t, v = sys.exc_info()[:2]
241 if type(t) == type(''):
242 exc_type_name = t
243 else: exc_type_name = t.__name__
Georg Brandl3e67c5c2010-07-30 14:14:42 +0000244 print >>self.stdout, '***', exc_type_name + ':', v
Tim Peters2344fae2001-01-15 00:50:52 +0000245
246 def precmd(self, line):
247 """Handle alias expansion and ';;' separator."""
Guido van Rossum08454592002-07-12 13:10:53 +0000248 if not line.strip():
Tim Peters2344fae2001-01-15 00:50:52 +0000249 return line
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000250 args = line.split()
Raymond Hettinger54f02222002-06-01 14:18:47 +0000251 while args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000252 line = self.aliases[args[0]]
253 ii = 1
254 for tmpArg in args[1:]:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000255 line = line.replace("%" + str(ii),
Tim Peters2344fae2001-01-15 00:50:52 +0000256 tmpArg)
257 ii = ii + 1
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000258 line = line.replace("%*", ' '.join(args[1:]))
259 args = line.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000260 # split into ';;' separated commands
261 # unless it's an alias command
262 if args[0] != 'alias':
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000263 marker = line.find(';;')
Tim Peters2344fae2001-01-15 00:50:52 +0000264 if marker >= 0:
265 # queue up everything after marker
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000266 next = line[marker+2:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000267 self.cmdqueue.append(next)
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000268 line = line[:marker].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000269 return line
270
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000271 def onecmd(self, line):
272 """Interpret the argument as though it had been typed in response
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000273 to the prompt.
274
Andrew M. Kuchling9aed98f2006-07-27 12:18:20 +0000275 Checks whether this line is typed at the normal prompt or in
Tim Petersdaea0352006-07-27 15:11:00 +0000276 a breakpoint command list definition.
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000277 """
278 if not self.commands_defining:
279 return cmd.Cmd.onecmd(self, line)
280 else:
281 return self.handle_command_def(line)
282
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000283 def handle_command_def(self,line):
Georg Brandl50775992010-08-01 19:33:15 +0000284 """Handles one command line during command list definition."""
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000285 cmd, arg, line = self.parseline(line)
Georg Brandl50775992010-08-01 19:33:15 +0000286 if not cmd:
287 return
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000288 if cmd == 'silent':
289 self.commands_silent[self.commands_bnum] = True
290 return # continue to handle other cmd def in the cmd list
291 elif cmd == 'end':
292 self.cmdqueue = []
293 return 1 # end of cmd list
294 cmdlist = self.commands[self.commands_bnum]
Georg Brandl50775992010-08-01 19:33:15 +0000295 if arg:
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000296 cmdlist.append(cmd+' '+arg)
297 else:
298 cmdlist.append(cmd)
299 # Determine if we must stop
300 try:
301 func = getattr(self, 'do_' + cmd)
302 except AttributeError:
303 func = self.default
Georg Brandl58152202009-05-05 09:06:02 +0000304 # one of the resuming commands
305 if func.func_name in self.commands_resuming:
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000306 self.commands_doprompt[self.commands_bnum] = False
307 self.cmdqueue = []
308 return 1
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000309 return
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000310
Tim Peters2344fae2001-01-15 00:50:52 +0000311 # Command definitions, called by cmdloop()
312 # The argument is the remaining string on the command line
313 # Return true to exit from the command loop
314
315 do_h = cmd.Cmd.do_help
316
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000317 def do_commands(self, arg):
Georg Brandl58152202009-05-05 09:06:02 +0000318 """Defines a list of commands associated to a breakpoint.
319
320 Those commands will be executed whenever the breakpoint causes
321 the program to stop execution."""
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000322 if not arg:
323 bnum = len(bdb.Breakpoint.bpbynumber)-1
324 else:
325 try:
326 bnum = int(arg)
327 except:
Georg Brandl58152202009-05-05 09:06:02 +0000328 print >>self.stdout, "Usage : commands [bnum]\n ..." \
329 "\n end"
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000330 return
331 self.commands_bnum = bnum
332 self.commands[bnum] = []
333 self.commands_doprompt[bnum] = True
334 self.commands_silent[bnum] = False
335 prompt_back = self.prompt
336 self.prompt = '(com) '
337 self.commands_defining = True
Georg Brandl50775992010-08-01 19:33:15 +0000338 try:
339 self.cmdloop()
340 finally:
341 self.commands_defining = False
342 self.prompt = prompt_back
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000343
Tim Peters2344fae2001-01-15 00:50:52 +0000344 def do_break(self, arg, temporary = 0):
345 # break [ ([filename:]lineno | function) [, "condition"] ]
346 if not arg:
347 if self.breaks: # There's at least one
Georg Brandl19564802006-05-10 17:13:20 +0000348 print >>self.stdout, "Num Type Disp Enb Where"
Tim Peters2344fae2001-01-15 00:50:52 +0000349 for bp in bdb.Breakpoint.bpbynumber:
350 if bp:
Georg Brandl19564802006-05-10 17:13:20 +0000351 bp.bpprint(self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000352 return
353 # parse arguments; comma has lowest precedence
354 # and cannot occur in filename
355 filename = None
356 lineno = None
357 cond = None
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000358 comma = arg.find(',')
Tim Peters2344fae2001-01-15 00:50:52 +0000359 if comma > 0:
360 # parse stuff after comma: "condition"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000361 cond = arg[comma+1:].lstrip()
362 arg = arg[:comma].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000363 # parse stuff before comma: [filename:]lineno | function
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000364 colon = arg.rfind(':')
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000365 funcname = None
Tim Peters2344fae2001-01-15 00:50:52 +0000366 if colon >= 0:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000367 filename = arg[:colon].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000368 f = self.lookupmodule(filename)
369 if not f:
Georg Brandl19564802006-05-10 17:13:20 +0000370 print >>self.stdout, '*** ', repr(filename),
371 print >>self.stdout, 'not found from sys.path'
Tim Peters2344fae2001-01-15 00:50:52 +0000372 return
373 else:
374 filename = f
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000375 arg = arg[colon+1:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000376 try:
377 lineno = int(arg)
378 except ValueError, msg:
Georg Brandl19564802006-05-10 17:13:20 +0000379 print >>self.stdout, '*** Bad lineno:', arg
Tim Peters2344fae2001-01-15 00:50:52 +0000380 return
381 else:
382 # no colon; can be lineno or function
383 try:
384 lineno = int(arg)
385 except ValueError:
386 try:
387 func = eval(arg,
388 self.curframe.f_globals,
Georg Brandle361bcb2009-04-01 23:32:17 +0000389 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000390 except:
391 func = arg
392 try:
393 if hasattr(func, 'im_func'):
394 func = func.im_func
395 code = func.func_code
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000396 #use co_name to identify the bkpt (function names
397 #could be aliased, but co_name is invariant)
398 funcname = code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000399 lineno = code.co_firstlineno
400 filename = code.co_filename
401 except:
402 # last thing to try
403 (ok, filename, ln) = self.lineinfo(arg)
404 if not ok:
Georg Brandl19564802006-05-10 17:13:20 +0000405 print >>self.stdout, '*** The specified object',
406 print >>self.stdout, repr(arg),
407 print >>self.stdout, 'is not a function'
408 print >>self.stdout, 'or was not found along sys.path.'
Tim Peters2344fae2001-01-15 00:50:52 +0000409 return
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000410 funcname = ok # ok contains a function name
Tim Peters2344fae2001-01-15 00:50:52 +0000411 lineno = int(ln)
412 if not filename:
413 filename = self.defaultFile()
414 # Check for reasonable breakpoint
415 line = self.checkline(filename, lineno)
416 if line:
417 # now set the break point
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000418 err = self.set_break(filename, line, temporary, cond, funcname)
Georg Brandl19564802006-05-10 17:13:20 +0000419 if err: print >>self.stdout, '***', err
Tim Peters2344fae2001-01-15 00:50:52 +0000420 else:
421 bp = self.get_breaks(filename, line)[-1]
Georg Brandl19564802006-05-10 17:13:20 +0000422 print >>self.stdout, "Breakpoint %d at %s:%d" % (bp.number,
423 bp.file,
424 bp.line)
Tim Peters2344fae2001-01-15 00:50:52 +0000425
426 # To be overridden in derived debuggers
427 def defaultFile(self):
428 """Produce a reasonable default."""
429 filename = self.curframe.f_code.co_filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000430 if filename == '<string>' and self.mainpyfile:
431 filename = self.mainpyfile
Tim Peters2344fae2001-01-15 00:50:52 +0000432 return filename
433
434 do_b = do_break
435
436 def do_tbreak(self, arg):
437 self.do_break(arg, 1)
438
439 def lineinfo(self, identifier):
440 failed = (None, None, None)
441 # Input is identifier, may be in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000442 idstring = identifier.split("'")
Tim Peters2344fae2001-01-15 00:50:52 +0000443 if len(idstring) == 1:
444 # not in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000445 id = idstring[0].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000446 elif len(idstring) == 3:
447 # quoted
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000448 id = idstring[1].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000449 else:
450 return failed
451 if id == '': return failed
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000452 parts = id.split('.')
Tim Peters2344fae2001-01-15 00:50:52 +0000453 # Protection for derived debuggers
454 if parts[0] == 'self':
455 del parts[0]
456 if len(parts) == 0:
457 return failed
458 # Best first guess at file to look at
459 fname = self.defaultFile()
460 if len(parts) == 1:
461 item = parts[0]
462 else:
463 # More than one part.
464 # First is module, second is method/class
465 f = self.lookupmodule(parts[0])
466 if f:
467 fname = f
468 item = parts[1]
469 answer = find_function(item, fname)
470 return answer or failed
471
472 def checkline(self, filename, lineno):
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000473 """Check whether specified line seems to be executable.
Tim Peters2344fae2001-01-15 00:50:52 +0000474
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000475 Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank
476 line or EOF). Warning: testing is not comprehensive.
477 """
Georg Brandl50775992010-08-01 19:33:15 +0000478 # this method should be callable before starting debugging, so default
479 # to "no globals" if there is no current frame
480 globs = self.curframe.f_globals if hasattr(self, 'curframe') else None
481 line = linecache.getline(filename, lineno, globs)
Tim Peters2344fae2001-01-15 00:50:52 +0000482 if not line:
Georg Brandl19564802006-05-10 17:13:20 +0000483 print >>self.stdout, 'End of file'
Tim Peters2344fae2001-01-15 00:50:52 +0000484 return 0
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000485 line = line.strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000486 # Don't allow setting breakpoint at a blank line
Guido van Rossum08454592002-07-12 13:10:53 +0000487 if (not line or (line[0] == '#') or
488 (line[:3] == '"""') or line[:3] == "'''"):
Georg Brandl19564802006-05-10 17:13:20 +0000489 print >>self.stdout, '*** Blank or comment'
Tim Peters2344fae2001-01-15 00:50:52 +0000490 return 0
Tim Peters2344fae2001-01-15 00:50:52 +0000491 return lineno
492
493 def do_enable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000494 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000495 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000496 try:
497 i = int(i)
498 except ValueError:
Georg Brandl19564802006-05-10 17:13:20 +0000499 print >>self.stdout, 'Breakpoint index %r is not a number' % i
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000500 continue
501
502 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Georg Brandl19564802006-05-10 17:13:20 +0000503 print >>self.stdout, 'No breakpoint numbered', i
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000504 continue
505
506 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000507 if bp:
508 bp.enable()
509
510 def do_disable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000511 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000512 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000513 try:
514 i = int(i)
515 except ValueError:
Georg Brandl19564802006-05-10 17:13:20 +0000516 print >>self.stdout, 'Breakpoint index %r is not a number' % i
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000517 continue
Tim Petersf545baa2003-06-15 23:26:30 +0000518
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000519 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Georg Brandl19564802006-05-10 17:13:20 +0000520 print >>self.stdout, 'No breakpoint numbered', i
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000521 continue
522
523 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000524 if bp:
525 bp.disable()
526
527 def do_condition(self, arg):
528 # arg is breakpoint number and condition
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000529 args = arg.split(' ', 1)
Georg Brandle4980832007-01-22 21:23:41 +0000530 try:
531 bpnum = int(args[0].strip())
532 except ValueError:
533 # something went wrong
534 print >>self.stdout, \
535 'Breakpoint index %r is not a number' % args[0]
Georg Brandlb2783182007-03-11 08:28:46 +0000536 return
Tim Peters2344fae2001-01-15 00:50:52 +0000537 try:
538 cond = args[1]
539 except:
540 cond = None
Collin Winter2faa9e12007-03-11 16:00:20 +0000541 try:
542 bp = bdb.Breakpoint.bpbynumber[bpnum]
543 except IndexError:
544 print >>self.stdout, 'Breakpoint index %r is not valid' % args[0]
545 return
Tim Peters2344fae2001-01-15 00:50:52 +0000546 if bp:
547 bp.cond = cond
548 if not cond:
Georg Brandl19564802006-05-10 17:13:20 +0000549 print >>self.stdout, 'Breakpoint', bpnum,
550 print >>self.stdout, 'is now unconditional.'
Tim Peters2344fae2001-01-15 00:50:52 +0000551
552 def do_ignore(self,arg):
553 """arg is bp number followed by ignore count."""
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000554 args = arg.split()
Georg Brandle4980832007-01-22 21:23:41 +0000555 try:
556 bpnum = int(args[0].strip())
557 except ValueError:
558 # something went wrong
559 print >>self.stdout, \
560 'Breakpoint index %r is not a number' % args[0]
Georg Brandlb2783182007-03-11 08:28:46 +0000561 return
Tim Peters2344fae2001-01-15 00:50:52 +0000562 try:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000563 count = int(args[1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000564 except:
565 count = 0
Collin Winter2faa9e12007-03-11 16:00:20 +0000566 try:
567 bp = bdb.Breakpoint.bpbynumber[bpnum]
568 except IndexError:
569 print >>self.stdout, 'Breakpoint index %r is not valid' % args[0]
570 return
Tim Peters2344fae2001-01-15 00:50:52 +0000571 if bp:
572 bp.ignore = count
Guido van Rossum08454592002-07-12 13:10:53 +0000573 if count > 0:
Tim Peters2344fae2001-01-15 00:50:52 +0000574 reply = 'Will ignore next '
Guido van Rossum08454592002-07-12 13:10:53 +0000575 if count > 1:
Tim Peters2344fae2001-01-15 00:50:52 +0000576 reply = reply + '%d crossings' % count
577 else:
578 reply = reply + '1 crossing'
Georg Brandl19564802006-05-10 17:13:20 +0000579 print >>self.stdout, reply + ' of breakpoint %d.' % bpnum
Tim Peters2344fae2001-01-15 00:50:52 +0000580 else:
Georg Brandl19564802006-05-10 17:13:20 +0000581 print >>self.stdout, 'Will stop next time breakpoint',
582 print >>self.stdout, bpnum, 'is reached.'
Tim Peters2344fae2001-01-15 00:50:52 +0000583
584 def do_clear(self, arg):
585 """Three possibilities, tried in this order:
586 clear -> clear all breaks, ask for confirmation
587 clear file:lineno -> clear all breaks at file:lineno
588 clear bpno bpno ... -> clear breakpoints by number"""
589 if not arg:
590 try:
591 reply = raw_input('Clear all breaks? ')
592 except EOFError:
593 reply = 'no'
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000594 reply = reply.strip().lower()
Tim Peters2344fae2001-01-15 00:50:52 +0000595 if reply in ('y', 'yes'):
596 self.clear_all_breaks()
597 return
598 if ':' in arg:
599 # Make sure it works for "clear C:\foo\bar.py:12"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000600 i = arg.rfind(':')
Tim Peters2344fae2001-01-15 00:50:52 +0000601 filename = arg[:i]
602 arg = arg[i+1:]
603 try:
604 lineno = int(arg)
Georg Brandl23d9d452006-05-03 18:12:33 +0000605 except ValueError:
Tim Peters2344fae2001-01-15 00:50:52 +0000606 err = "Invalid line number (%s)" % arg
607 else:
608 err = self.clear_break(filename, lineno)
Georg Brandl19564802006-05-10 17:13:20 +0000609 if err: print >>self.stdout, '***', err
Tim Peters2344fae2001-01-15 00:50:52 +0000610 return
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000611 numberlist = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000612 for i in numberlist:
Georg Brandl23d9d452006-05-03 18:12:33 +0000613 try:
614 i = int(i)
615 except ValueError:
Georg Brandl19564802006-05-10 17:13:20 +0000616 print >>self.stdout, 'Breakpoint index %r is not a number' % i
Georg Brandl23d9d452006-05-03 18:12:33 +0000617 continue
618
Georg Brandl6d2b3462005-08-24 07:36:17 +0000619 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Georg Brandl19564802006-05-10 17:13:20 +0000620 print >>self.stdout, 'No breakpoint numbered', i
Georg Brandl6d2b3462005-08-24 07:36:17 +0000621 continue
Tim Peters2344fae2001-01-15 00:50:52 +0000622 err = self.clear_bpbynumber(i)
623 if err:
Georg Brandl19564802006-05-10 17:13:20 +0000624 print >>self.stdout, '***', err
Tim Peters2344fae2001-01-15 00:50:52 +0000625 else:
Georg Brandl19564802006-05-10 17:13:20 +0000626 print >>self.stdout, 'Deleted breakpoint', i
Tim Peters2344fae2001-01-15 00:50:52 +0000627 do_cl = do_clear # 'c' is already an abbreviation for 'continue'
628
629 def do_where(self, arg):
630 self.print_stack_trace()
631 do_w = do_where
Guido van Rossum6bd68352001-01-20 17:57:37 +0000632 do_bt = do_where
Tim Peters2344fae2001-01-15 00:50:52 +0000633
634 def do_up(self, arg):
635 if self.curindex == 0:
Georg Brandl19564802006-05-10 17:13:20 +0000636 print >>self.stdout, '*** Oldest frame'
Tim Peters2344fae2001-01-15 00:50:52 +0000637 else:
638 self.curindex = self.curindex - 1
639 self.curframe = self.stack[self.curindex][0]
Georg Brandl569fc962009-04-02 02:00:01 +0000640 self.curframe_locals = self.curframe.f_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000641 self.print_stack_entry(self.stack[self.curindex])
642 self.lineno = None
643 do_u = do_up
644
645 def do_down(self, arg):
646 if self.curindex + 1 == len(self.stack):
Georg Brandl19564802006-05-10 17:13:20 +0000647 print >>self.stdout, '*** Newest frame'
Tim Peters2344fae2001-01-15 00:50:52 +0000648 else:
649 self.curindex = self.curindex + 1
650 self.curframe = self.stack[self.curindex][0]
Georg Brandl569fc962009-04-02 02:00:01 +0000651 self.curframe_locals = self.curframe.f_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000652 self.print_stack_entry(self.stack[self.curindex])
653 self.lineno = None
654 do_d = do_down
655
Benjamin Peterson98353942008-05-11 14:13:25 +0000656 def do_until(self, arg):
657 self.set_until(self.curframe)
658 return 1
659 do_unt = do_until
660
Tim Peters2344fae2001-01-15 00:50:52 +0000661 def do_step(self, arg):
662 self.set_step()
663 return 1
664 do_s = do_step
665
666 def do_next(self, arg):
667 self.set_next(self.curframe)
668 return 1
669 do_n = do_next
670
Georg Brandl8e84c652007-03-13 21:08:15 +0000671 def do_run(self, arg):
Georg Brandl58152202009-05-05 09:06:02 +0000672 """Restart program by raising an exception to be caught in the main
673 debugger loop. If arguments were given, set them in sys.argv."""
Georg Brandl8e84c652007-03-13 21:08:15 +0000674 if arg:
675 import shlex
676 argv0 = sys.argv[0:1]
677 sys.argv = shlex.split(arg)
678 sys.argv[:0] = argv0
679 raise Restart
680
681 do_restart = do_run
682
Tim Peters2344fae2001-01-15 00:50:52 +0000683 def do_return(self, arg):
684 self.set_return(self.curframe)
685 return 1
686 do_r = do_return
687
688 def do_continue(self, arg):
689 self.set_continue()
690 return 1
691 do_c = do_cont = do_continue
692
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000693 def do_jump(self, arg):
694 if self.curindex + 1 != len(self.stack):
Georg Brandl19564802006-05-10 17:13:20 +0000695 print >>self.stdout, "*** You can only jump within the bottom frame"
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000696 return
697 try:
698 arg = int(arg)
699 except ValueError:
Georg Brandl19564802006-05-10 17:13:20 +0000700 print >>self.stdout, "*** The 'jump' command requires a line number."
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000701 else:
702 try:
703 # Do the jump, fix up our copy of the stack, and display the
704 # new position
705 self.curframe.f_lineno = arg
706 self.stack[self.curindex] = self.stack[self.curindex][0], arg
707 self.print_stack_entry(self.stack[self.curindex])
708 except ValueError, e:
Georg Brandl19564802006-05-10 17:13:20 +0000709 print >>self.stdout, '*** Jump failed:', e
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000710 do_j = do_jump
711
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000712 def do_debug(self, arg):
713 sys.settrace(None)
714 globals = self.curframe.f_globals
Georg Brandle361bcb2009-04-01 23:32:17 +0000715 locals = self.curframe_locals
Guido van Rossumcad37242008-01-15 17:59:29 +0000716 p = Pdb(self.completekey, self.stdin, self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000717 p.prompt = "(%s) " % self.prompt.strip()
Georg Brandl19564802006-05-10 17:13:20 +0000718 print >>self.stdout, "ENTERING RECURSIVE DEBUGGER"
Guido van Rossumed538d82003-04-09 19:36:34 +0000719 sys.call_tracing(p.run, (arg, globals, locals))
Georg Brandl19564802006-05-10 17:13:20 +0000720 print >>self.stdout, "LEAVING RECURSIVE DEBUGGER"
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000721 sys.settrace(self.trace_dispatch)
722 self.lastcmd = p.lastcmd
723
Tim Peters2344fae2001-01-15 00:50:52 +0000724 def do_quit(self, arg):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000725 self._user_requested_quit = 1
Tim Peters2344fae2001-01-15 00:50:52 +0000726 self.set_quit()
727 return 1
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000728
Tim Peters2344fae2001-01-15 00:50:52 +0000729 do_q = do_quit
Guido van Rossumd1c08f32002-04-15 00:48:24 +0000730 do_exit = do_quit
Tim Peters2344fae2001-01-15 00:50:52 +0000731
Guido van Rossumeef26072003-01-13 21:13:55 +0000732 def do_EOF(self, arg):
Georg Brandl19564802006-05-10 17:13:20 +0000733 print >>self.stdout
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000734 self._user_requested_quit = 1
Guido van Rossumeef26072003-01-13 21:13:55 +0000735 self.set_quit()
736 return 1
737
Tim Peters2344fae2001-01-15 00:50:52 +0000738 def do_args(self, arg):
Georg Brandle361bcb2009-04-01 23:32:17 +0000739 co = self.curframe.f_code
740 dict = self.curframe_locals
Tim Peters2344fae2001-01-15 00:50:52 +0000741 n = co.co_argcount
742 if co.co_flags & 4: n = n+1
743 if co.co_flags & 8: n = n+1
744 for i in range(n):
745 name = co.co_varnames[i]
Georg Brandl19564802006-05-10 17:13:20 +0000746 print >>self.stdout, name, '=',
747 if name in dict: print >>self.stdout, dict[name]
748 else: print >>self.stdout, "*** undefined ***"
Tim Peters2344fae2001-01-15 00:50:52 +0000749 do_a = do_args
Guido van Rossum2424f851998-09-11 22:50:09 +0000750
Tim Peters2344fae2001-01-15 00:50:52 +0000751 def do_retval(self, arg):
Georg Brandle361bcb2009-04-01 23:32:17 +0000752 if '__return__' in self.curframe_locals:
753 print >>self.stdout, self.curframe_locals['__return__']
Tim Peters2344fae2001-01-15 00:50:52 +0000754 else:
Georg Brandl19564802006-05-10 17:13:20 +0000755 print >>self.stdout, '*** Not yet returned!'
Tim Peters2344fae2001-01-15 00:50:52 +0000756 do_rv = do_retval
Guido van Rossum2424f851998-09-11 22:50:09 +0000757
Barry Warsaw210bd202002-11-05 22:40:20 +0000758 def _getval(self, arg):
Tim Peters2344fae2001-01-15 00:50:52 +0000759 try:
Barry Warsaw210bd202002-11-05 22:40:20 +0000760 return eval(arg, self.curframe.f_globals,
Georg Brandle361bcb2009-04-01 23:32:17 +0000761 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000762 except:
763 t, v = sys.exc_info()[:2]
Barry Warsaw210bd202002-11-05 22:40:20 +0000764 if isinstance(t, str):
Tim Peters2344fae2001-01-15 00:50:52 +0000765 exc_type_name = t
766 else: exc_type_name = t.__name__
Georg Brandl3e67c5c2010-07-30 14:14:42 +0000767 print >>self.stdout, '***', exc_type_name + ':', repr(v)
Barry Warsaw210bd202002-11-05 22:40:20 +0000768 raise
Guido van Rossum2424f851998-09-11 22:50:09 +0000769
Barry Warsaw210bd202002-11-05 22:40:20 +0000770 def do_p(self, arg):
771 try:
Georg Brandl19564802006-05-10 17:13:20 +0000772 print >>self.stdout, repr(self._getval(arg))
Barry Warsaw210bd202002-11-05 22:40:20 +0000773 except:
774 pass
775
776 def do_pp(self, arg):
777 try:
Georg Brandl19564802006-05-10 17:13:20 +0000778 pprint.pprint(self._getval(arg), self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +0000779 except:
780 pass
Guido van Rossum2424f851998-09-11 22:50:09 +0000781
Tim Peters2344fae2001-01-15 00:50:52 +0000782 def do_list(self, arg):
783 self.lastcmd = 'list'
784 last = None
785 if arg:
786 try:
787 x = eval(arg, {}, {})
788 if type(x) == type(()):
789 first, last = x
790 first = int(first)
791 last = int(last)
792 if last < first:
793 # Assume it's a count
794 last = first + last
795 else:
796 first = max(1, int(x) - 5)
797 except:
Georg Brandl19564802006-05-10 17:13:20 +0000798 print >>self.stdout, '*** Error in argument:', repr(arg)
Tim Peters2344fae2001-01-15 00:50:52 +0000799 return
800 elif self.lineno is None:
801 first = max(1, self.curframe.f_lineno - 5)
802 else:
803 first = self.lineno + 1
804 if last is None:
805 last = first + 10
806 filename = self.curframe.f_code.co_filename
807 breaklist = self.get_file_breaks(filename)
808 try:
809 for lineno in range(first, last+1):
Georg Brandl58152202009-05-05 09:06:02 +0000810 line = linecache.getline(filename, lineno,
811 self.curframe.f_globals)
Tim Peters2344fae2001-01-15 00:50:52 +0000812 if not line:
Georg Brandl19564802006-05-10 17:13:20 +0000813 print >>self.stdout, '[EOF]'
Tim Peters2344fae2001-01-15 00:50:52 +0000814 break
815 else:
Walter Dörwald70a6b492004-02-12 17:35:32 +0000816 s = repr(lineno).rjust(3)
Tim Peters2344fae2001-01-15 00:50:52 +0000817 if len(s) < 4: s = s + ' '
818 if lineno in breaklist: s = s + 'B'
819 else: s = s + ' '
820 if lineno == self.curframe.f_lineno:
821 s = s + '->'
Georg Brandl19564802006-05-10 17:13:20 +0000822 print >>self.stdout, s + '\t' + line,
Tim Peters2344fae2001-01-15 00:50:52 +0000823 self.lineno = lineno
824 except KeyboardInterrupt:
825 pass
826 do_l = do_list
Guido van Rossum2424f851998-09-11 22:50:09 +0000827
Tim Peters2344fae2001-01-15 00:50:52 +0000828 def do_whatis(self, arg):
829 try:
830 value = eval(arg, self.curframe.f_globals,
Georg Brandle361bcb2009-04-01 23:32:17 +0000831 self.curframe_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000832 except:
833 t, v = sys.exc_info()[:2]
834 if type(t) == type(''):
835 exc_type_name = t
836 else: exc_type_name = t.__name__
Georg Brandl19564802006-05-10 17:13:20 +0000837 print >>self.stdout, '***', exc_type_name + ':', repr(v)
Tim Peters2344fae2001-01-15 00:50:52 +0000838 return
839 code = None
840 # Is it a function?
841 try: code = value.func_code
842 except: pass
843 if code:
Georg Brandl19564802006-05-10 17:13:20 +0000844 print >>self.stdout, 'Function', code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000845 return
846 # Is it an instance method?
847 try: code = value.im_func.func_code
848 except: pass
849 if code:
Georg Brandl19564802006-05-10 17:13:20 +0000850 print >>self.stdout, 'Method', code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000851 return
852 # None of the above...
Georg Brandl19564802006-05-10 17:13:20 +0000853 print >>self.stdout, type(value)
Guido van Rossum8e2ec561993-07-29 09:37:38 +0000854
Tim Peters2344fae2001-01-15 00:50:52 +0000855 def do_alias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000856 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000857 if len(args) == 0:
858 keys = self.aliases.keys()
859 keys.sort()
860 for alias in keys:
Georg Brandl19564802006-05-10 17:13:20 +0000861 print >>self.stdout, "%s = %s" % (alias, self.aliases[alias])
Tim Peters2344fae2001-01-15 00:50:52 +0000862 return
Guido van Rossum08454592002-07-12 13:10:53 +0000863 if args[0] in self.aliases and len(args) == 1:
Georg Brandl19564802006-05-10 17:13:20 +0000864 print >>self.stdout, "%s = %s" % (args[0], self.aliases[args[0]])
Tim Peters2344fae2001-01-15 00:50:52 +0000865 else:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000866 self.aliases[args[0]] = ' '.join(args[1:])
Guido van Rossum23efba41992-01-27 16:58:47 +0000867
Tim Peters2344fae2001-01-15 00:50:52 +0000868 def do_unalias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000869 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000870 if len(args) == 0: return
Raymond Hettinger54f02222002-06-01 14:18:47 +0000871 if args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000872 del self.aliases[args[0]]
Guido van Rossum00230781993-03-29 11:39:45 +0000873
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000874 #list of all the commands making the program resume execution.
Georg Brandl19564802006-05-10 17:13:20 +0000875 commands_resuming = ['do_continue', 'do_step', 'do_next', 'do_return',
876 'do_quit', 'do_jump']
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000877
Tim Peters2344fae2001-01-15 00:50:52 +0000878 # Print a traceback starting at the top stack frame.
879 # The most recently entered frame is printed last;
880 # this is different from dbx and gdb, but consistent with
881 # the Python interpreter's stack trace.
882 # It is also consistent with the up/down commands (which are
883 # compatible with dbx and gdb: up moves towards 'main()'
884 # and down moves towards the most recent stack frame).
Guido van Rossum2424f851998-09-11 22:50:09 +0000885
Tim Peters2344fae2001-01-15 00:50:52 +0000886 def print_stack_trace(self):
887 try:
888 for frame_lineno in self.stack:
889 self.print_stack_entry(frame_lineno)
890 except KeyboardInterrupt:
891 pass
Guido van Rossum2424f851998-09-11 22:50:09 +0000892
Tim Peters2344fae2001-01-15 00:50:52 +0000893 def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix):
894 frame, lineno = frame_lineno
895 if frame is self.curframe:
Georg Brandl19564802006-05-10 17:13:20 +0000896 print >>self.stdout, '>',
Tim Peters2344fae2001-01-15 00:50:52 +0000897 else:
Georg Brandl19564802006-05-10 17:13:20 +0000898 print >>self.stdout, ' ',
899 print >>self.stdout, self.format_stack_entry(frame_lineno,
900 prompt_prefix)
Guido van Rossum2424f851998-09-11 22:50:09 +0000901
Guido van Rossum921c8241992-01-10 14:54:42 +0000902
Tim Peters2344fae2001-01-15 00:50:52 +0000903 # Help methods (derived from pdb.doc)
Guido van Rossum921c8241992-01-10 14:54:42 +0000904
Tim Peters2344fae2001-01-15 00:50:52 +0000905 def help_help(self):
906 self.help_h()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000907
Tim Peters2344fae2001-01-15 00:50:52 +0000908 def help_h(self):
Georg Brandl19564802006-05-10 17:13:20 +0000909 print >>self.stdout, """h(elp)
Tim Peters2344fae2001-01-15 00:50:52 +0000910Without argument, print the list of available commands.
911With a command name as argument, print help about that command
912"help pdb" pipes the full documentation file to the $PAGER
913"help exec" gives help on the ! command"""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000914
Tim Peters2344fae2001-01-15 00:50:52 +0000915 def help_where(self):
916 self.help_w()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000917
Tim Peters2344fae2001-01-15 00:50:52 +0000918 def help_w(self):
Georg Brandl19564802006-05-10 17:13:20 +0000919 print >>self.stdout, """w(here)
Tim Peters2344fae2001-01-15 00:50:52 +0000920Print a stack trace, with the most recent frame at the bottom.
921An arrow indicates the "current frame", which determines the
Guido van Rossum6bd68352001-01-20 17:57:37 +0000922context of most commands. 'bt' is an alias for this command."""
923
924 help_bt = help_w
Guido van Rossumb6775db1994-08-01 11:34:53 +0000925
Tim Peters2344fae2001-01-15 00:50:52 +0000926 def help_down(self):
927 self.help_d()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000928
Tim Peters2344fae2001-01-15 00:50:52 +0000929 def help_d(self):
Georg Brandl19564802006-05-10 17:13:20 +0000930 print >>self.stdout, """d(own)
Tim Peters2344fae2001-01-15 00:50:52 +0000931Move the current frame one level down in the stack trace
Johannes Gijsbers34c41202004-08-14 15:19:28 +0000932(to a newer frame)."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000933
Tim Peters2344fae2001-01-15 00:50:52 +0000934 def help_up(self):
935 self.help_u()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000936
Tim Peters2344fae2001-01-15 00:50:52 +0000937 def help_u(self):
Georg Brandl19564802006-05-10 17:13:20 +0000938 print >>self.stdout, """u(p)
Tim Peters2344fae2001-01-15 00:50:52 +0000939Move the current frame one level up in the stack trace
Johannes Gijsbers34c41202004-08-14 15:19:28 +0000940(to an older frame)."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000941
Tim Peters2344fae2001-01-15 00:50:52 +0000942 def help_break(self):
943 self.help_b()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000944
Tim Peters2344fae2001-01-15 00:50:52 +0000945 def help_b(self):
Georg Brandl19564802006-05-10 17:13:20 +0000946 print >>self.stdout, """b(reak) ([file:]lineno | function) [, condition]
Tim Peters2344fae2001-01-15 00:50:52 +0000947With a line number argument, set a break there in the current
948file. With a function name, set a break at first executable line
949of that function. Without argument, list all breaks. If a second
950argument is present, it is a string specifying an expression
951which must evaluate to true before the breakpoint is honored.
Guido van Rossumb6775db1994-08-01 11:34:53 +0000952
Tim Peters2344fae2001-01-15 00:50:52 +0000953The line number may be prefixed with a filename and a colon,
954to specify a breakpoint in another file (probably one that
955hasn't been loaded yet). The file is searched for on sys.path;
956the .py suffix may be omitted."""
Guido van Rossumb5699c71998-07-20 23:13:54 +0000957
Tim Peters2344fae2001-01-15 00:50:52 +0000958 def help_clear(self):
959 self.help_cl()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000960
Tim Peters2344fae2001-01-15 00:50:52 +0000961 def help_cl(self):
Georg Brandl19564802006-05-10 17:13:20 +0000962 print >>self.stdout, "cl(ear) filename:lineno"
963 print >>self.stdout, """cl(ear) [bpnumber [bpnumber...]]
Tim Peters2344fae2001-01-15 00:50:52 +0000964With a space separated list of breakpoint numbers, clear
965those breakpoints. Without argument, clear all breaks (but
966first ask confirmation). With a filename:lineno argument,
967clear all breaks at that line in that file.
Guido van Rossumb6775db1994-08-01 11:34:53 +0000968
Tim Peters2344fae2001-01-15 00:50:52 +0000969Note that the argument is different from previous versions of
970the debugger (in python distributions 1.5.1 and before) where
971a linenumber was used instead of either filename:lineno or
972breakpoint numbers."""
Guido van Rossumb5699c71998-07-20 23:13:54 +0000973
Tim Peters2344fae2001-01-15 00:50:52 +0000974 def help_tbreak(self):
Georg Brandl58152202009-05-05 09:06:02 +0000975 print >>self.stdout, """tbreak same arguments as break, but breakpoint
976is removed when first hit."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000977
Tim Peters2344fae2001-01-15 00:50:52 +0000978 def help_enable(self):
Georg Brandl19564802006-05-10 17:13:20 +0000979 print >>self.stdout, """enable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +0000980Enables the breakpoints given as a space separated list of
981bp numbers."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000982
Tim Peters2344fae2001-01-15 00:50:52 +0000983 def help_disable(self):
Georg Brandl19564802006-05-10 17:13:20 +0000984 print >>self.stdout, """disable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +0000985Disables the breakpoints given as a space separated list of
986bp numbers."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000987
Tim Peters2344fae2001-01-15 00:50:52 +0000988 def help_ignore(self):
Georg Brandl19564802006-05-10 17:13:20 +0000989 print >>self.stdout, """ignore bpnumber count
Tim Peters2344fae2001-01-15 00:50:52 +0000990Sets the ignore count for the given breakpoint number. A breakpoint
991becomes active when the ignore count is zero. When non-zero, the
992count is decremented each time the breakpoint is reached and the
993breakpoint is not disabled and any associated condition evaluates
994to true."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000995
Tim Peters2344fae2001-01-15 00:50:52 +0000996 def help_condition(self):
Georg Brandl19564802006-05-10 17:13:20 +0000997 print >>self.stdout, """condition bpnumber str_condition
Tim Peters2344fae2001-01-15 00:50:52 +0000998str_condition is a string specifying an expression which
999must evaluate to true before the breakpoint is honored.
1000If str_condition is absent, any existing condition is removed;
1001i.e., the breakpoint is made unconditional."""
Guido van Rossum2424f851998-09-11 22:50:09 +00001002
Tim Peters2344fae2001-01-15 00:50:52 +00001003 def help_step(self):
1004 self.help_s()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001005
Tim Peters2344fae2001-01-15 00:50:52 +00001006 def help_s(self):
Georg Brandl19564802006-05-10 17:13:20 +00001007 print >>self.stdout, """s(tep)
Tim Peters2344fae2001-01-15 00:50:52 +00001008Execute the current line, stop at the first possible occasion
1009(either in a function that is called or in the current function)."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001010
Benjamin Peterson98353942008-05-11 14:13:25 +00001011 def help_until(self):
1012 self.help_unt()
1013
1014 def help_unt(self):
1015 print """unt(il)
1016Continue execution until the line with a number greater than the current
1017one is reached or until the current frame returns"""
1018
Tim Peters2344fae2001-01-15 00:50:52 +00001019 def help_next(self):
1020 self.help_n()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001021
Tim Peters2344fae2001-01-15 00:50:52 +00001022 def help_n(self):
Georg Brandl19564802006-05-10 17:13:20 +00001023 print >>self.stdout, """n(ext)
Tim Peters2344fae2001-01-15 00:50:52 +00001024Continue execution until the next line in the current function
1025is reached or it returns."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001026
Tim Peters2344fae2001-01-15 00:50:52 +00001027 def help_return(self):
1028 self.help_r()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001029
Tim Peters2344fae2001-01-15 00:50:52 +00001030 def help_r(self):
Georg Brandl19564802006-05-10 17:13:20 +00001031 print >>self.stdout, """r(eturn)
Tim Peters2344fae2001-01-15 00:50:52 +00001032Continue execution until the current function returns."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001033
Tim Peters2344fae2001-01-15 00:50:52 +00001034 def help_continue(self):
1035 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001036
Tim Peters2344fae2001-01-15 00:50:52 +00001037 def help_cont(self):
1038 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001039
Tim Peters2344fae2001-01-15 00:50:52 +00001040 def help_c(self):
Georg Brandl19564802006-05-10 17:13:20 +00001041 print >>self.stdout, """c(ont(inue))
Tim Peters2344fae2001-01-15 00:50:52 +00001042Continue execution, only stop when a breakpoint is encountered."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001043
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001044 def help_jump(self):
1045 self.help_j()
1046
1047 def help_j(self):
Georg Brandl19564802006-05-10 17:13:20 +00001048 print >>self.stdout, """j(ump) lineno
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001049Set the next line that will be executed."""
1050
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001051 def help_debug(self):
Georg Brandl19564802006-05-10 17:13:20 +00001052 print >>self.stdout, """debug code
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001053Enter a recursive debugger that steps through the code argument
1054(which is an arbitrary expression or statement to be executed
1055in the current environment)."""
1056
Tim Peters2344fae2001-01-15 00:50:52 +00001057 def help_list(self):
1058 self.help_l()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001059
Tim Peters2344fae2001-01-15 00:50:52 +00001060 def help_l(self):
Georg Brandl19564802006-05-10 17:13:20 +00001061 print >>self.stdout, """l(ist) [first [,last]]
Tim Peters2344fae2001-01-15 00:50:52 +00001062List source code for the current file.
1063Without arguments, list 11 lines around the current line
1064or continue the previous listing.
1065With one argument, list 11 lines starting at that line.
1066With two arguments, list the given range;
1067if the second argument is less than the first, it is a count."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001068
Tim Peters2344fae2001-01-15 00:50:52 +00001069 def help_args(self):
1070 self.help_a()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001071
Tim Peters2344fae2001-01-15 00:50:52 +00001072 def help_a(self):
Georg Brandl19564802006-05-10 17:13:20 +00001073 print >>self.stdout, """a(rgs)
Tim Peters2344fae2001-01-15 00:50:52 +00001074Print the arguments of the current function."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001075
Tim Peters2344fae2001-01-15 00:50:52 +00001076 def help_p(self):
Georg Brandl19564802006-05-10 17:13:20 +00001077 print >>self.stdout, """p expression
Tim Peters2344fae2001-01-15 00:50:52 +00001078Print the value of the expression."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001079
Barry Warsaw210bd202002-11-05 22:40:20 +00001080 def help_pp(self):
Georg Brandl19564802006-05-10 17:13:20 +00001081 print >>self.stdout, """pp expression
Barry Warsaw210bd202002-11-05 22:40:20 +00001082Pretty-print the value of the expression."""
1083
Tim Peters2344fae2001-01-15 00:50:52 +00001084 def help_exec(self):
Georg Brandl19564802006-05-10 17:13:20 +00001085 print >>self.stdout, """(!) statement
Tim Peters2344fae2001-01-15 00:50:52 +00001086Execute the (one-line) statement in the context of
1087the current stack frame.
1088The exclamation point can be omitted unless the first word
1089of the statement resembles a debugger command.
1090To assign to a global variable you must always prefix the
1091command with a 'global' command, e.g.:
1092(Pdb) global list_options; list_options = ['-l']
1093(Pdb)"""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001094
Georg Brandl8e84c652007-03-13 21:08:15 +00001095 def help_run(self):
1096 print """run [args...]
1097Restart the debugged python program. If a string is supplied, it is
Ezio Melottif5469cf2013-08-17 15:43:51 +03001098split with "shlex" and the result is used as the new sys.argv.
Georg Brandl8e84c652007-03-13 21:08:15 +00001099History, breakpoints, actions and debugger options are preserved.
1100"restart" is an alias for "run"."""
1101
1102 help_restart = help_run
1103
Tim Peters2344fae2001-01-15 00:50:52 +00001104 def help_quit(self):
1105 self.help_q()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001106
Tim Peters2344fae2001-01-15 00:50:52 +00001107 def help_q(self):
Georg Brandl19564802006-05-10 17:13:20 +00001108 print >>self.stdout, """q(uit) or exit - Quit from the debugger.
Tim Peters2344fae2001-01-15 00:50:52 +00001109The program being executed is aborted."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001110
Guido van Rossumd1c08f32002-04-15 00:48:24 +00001111 help_exit = help_q
1112
Tim Peters2344fae2001-01-15 00:50:52 +00001113 def help_whatis(self):
Georg Brandl19564802006-05-10 17:13:20 +00001114 print >>self.stdout, """whatis arg
Tim Peters2344fae2001-01-15 00:50:52 +00001115Prints the type of the argument."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001116
Tim Peters2344fae2001-01-15 00:50:52 +00001117 def help_EOF(self):
Georg Brandl19564802006-05-10 17:13:20 +00001118 print >>self.stdout, """EOF
Tim Peters2344fae2001-01-15 00:50:52 +00001119Handles the receipt of EOF as a command."""
Guido van Rossum2424f851998-09-11 22:50:09 +00001120
Tim Peters2344fae2001-01-15 00:50:52 +00001121 def help_alias(self):
Georg Brandl58152202009-05-05 09:06:02 +00001122 print >>self.stdout, """alias [name [command [parameter parameter ...]]]
Tim Peters2344fae2001-01-15 00:50:52 +00001123Creates an alias called 'name' the executes 'command'. The command
1124must *not* be enclosed in quotes. Replaceable parameters are
1125indicated by %1, %2, and so on, while %* is replaced by all the
1126parameters. If no command is given, the current alias for name
1127is shown. If no name is given, all aliases are listed.
Guido van Rossum2424f851998-09-11 22:50:09 +00001128
Tim Peters2344fae2001-01-15 00:50:52 +00001129Aliases may be nested and can contain anything that can be
1130legally typed at the pdb prompt. Note! You *can* override
1131internal pdb commands with aliases! Those internal commands
1132are then hidden until the alias is removed. Aliasing is recursively
1133applied to the first word of the command line; all other words
1134in the line are left alone.
Guido van Rossum2424f851998-09-11 22:50:09 +00001135
Tim Peters2344fae2001-01-15 00:50:52 +00001136Some useful aliases (especially when placed in the .pdbrc file) are:
Guido van Rossum2424f851998-09-11 22:50:09 +00001137
Tim Peters2344fae2001-01-15 00:50:52 +00001138#Print instance variables (usage "pi classInst")
1139alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
Guido van Rossum2424f851998-09-11 22:50:09 +00001140
Tim Peters2344fae2001-01-15 00:50:52 +00001141#Print instance variables in self
1142alias ps pi self
1143"""
Guido van Rossum2424f851998-09-11 22:50:09 +00001144
Tim Peters2344fae2001-01-15 00:50:52 +00001145 def help_unalias(self):
Georg Brandl19564802006-05-10 17:13:20 +00001146 print >>self.stdout, """unalias name
Tim Peters2344fae2001-01-15 00:50:52 +00001147Deletes the specified alias."""
Guido van Rossum2424f851998-09-11 22:50:09 +00001148
Martin v. Löwisbd30f522006-04-17 17:08:37 +00001149 def help_commands(self):
Georg Brandl19564802006-05-10 17:13:20 +00001150 print >>self.stdout, """commands [bpnumber]
Martin v. Löwisbd30f522006-04-17 17:08:37 +00001151(com) ...
1152(com) end
1153(Pdb)
1154
1155Specify a list of commands for breakpoint number bpnumber. The
1156commands themselves appear on the following lines. Type a line
1157containing just 'end' to terminate the commands.
1158
1159To remove all commands from a breakpoint, type commands and
1160follow it immediately with end; that is, give no commands.
1161
1162With no bpnumber argument, commands refers to the last
1163breakpoint set.
1164
1165You can use breakpoint commands to start your program up again.
1166Simply use the continue command, or step, or any other
1167command that resumes execution.
1168
1169Specifying any command resuming execution (currently continue,
1170step, next, return, jump, quit and their abbreviations) terminates
1171the command list (as if that command was immediately followed by end).
1172This is because any time you resume execution
Martin v. Löwisf62eee12006-04-17 17:37:09 +00001173(even with a simple next or step), you may encounter
Martin v. Löwisbd30f522006-04-17 17:08:37 +00001174another breakpoint--which could have its own command list, leading to
1175ambiguities about which list to execute.
1176
1177 If you use the 'silent' command in the command list, the
1178usual message about stopping at a breakpoint is not printed. This may
1179be desirable for breakpoints that are to print a specific message and
1180then continue. If none of the other commands print anything, you
1181see no sign that the breakpoint was reached.
1182"""
1183
Tim Peters2344fae2001-01-15 00:50:52 +00001184 def help_pdb(self):
1185 help()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001186
Tim Peters2344fae2001-01-15 00:50:52 +00001187 def lookupmodule(self, filename):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001188 """Helper function for break/clear parsing -- may be overridden.
1189
1190 lookupmodule() translates (possibly incomplete) file or module name
1191 into an absolute file name.
1192 """
1193 if os.path.isabs(filename) and os.path.exists(filename):
Tim Peterse718f612004-10-12 21:51:32 +00001194 return filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001195 f = os.path.join(sys.path[0], filename)
1196 if os.path.exists(f) and self.canonic(f) == self.mainpyfile:
1197 return f
Tim Peters2344fae2001-01-15 00:50:52 +00001198 root, ext = os.path.splitext(filename)
1199 if ext == '':
1200 filename = filename + '.py'
1201 if os.path.isabs(filename):
1202 return filename
1203 for dirname in sys.path:
1204 while os.path.islink(dirname):
1205 dirname = os.readlink(dirname)
1206 fullname = os.path.join(dirname, filename)
1207 if os.path.exists(fullname):
1208 return fullname
1209 return None
Guido van Rossumb5699c71998-07-20 23:13:54 +00001210
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001211 def _runscript(self, filename):
Georg Brandlb6ae6aa2007-03-13 21:58:44 +00001212 # The script has to run in __main__ namespace (or imports from
1213 # __main__ will break).
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001214 #
Georg Brandlb6ae6aa2007-03-13 21:58:44 +00001215 # So we clear up the __main__ and set several special variables
1216 # (this gets rid of pdb's globals and cleans old variables on restarts).
1217 import __main__
1218 __main__.__dict__.clear()
1219 __main__.__dict__.update({"__name__" : "__main__",
1220 "__file__" : filename,
1221 "__builtins__": __builtins__,
1222 })
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001223
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001224 # When bdb sets tracing, a number of call and line events happens
1225 # BEFORE debugger even reaches user's code (and the exact sequence of
1226 # events depends on python version). So we take special measures to
1227 # avoid stopping before we reach the main script (see user_line and
1228 # user_call for details).
1229 self._wait_for_mainpyfile = 1
1230 self.mainpyfile = self.canonic(filename)
1231 self._user_requested_quit = 0
Jason R. Coombs5d032c02011-11-17 18:03:24 -05001232 statement = 'execfile(%r)' % filename
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001233 self.run(statement)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001234
Guido van Rossum35771131992-09-08 11:59:04 +00001235# Simplified interface
1236
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001237def run(statement, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001238 Pdb().run(statement, globals, locals)
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001239
1240def runeval(expression, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001241 return Pdb().runeval(expression, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001242
1243def runctx(statement, globals, locals):
Tim Peters2344fae2001-01-15 00:50:52 +00001244 # B/W compatibility
1245 run(statement, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001246
Raymond Hettinger2ef7e6c2004-10-24 00:32:24 +00001247def runcall(*args, **kwds):
1248 return Pdb().runcall(*args, **kwds)
Guido van Rossum4e160981992-09-02 20:43:20 +00001249
Guido van Rossumb6775db1994-08-01 11:34:53 +00001250def set_trace():
Johannes Gijsbers84a6c202004-11-07 11:35:30 +00001251 Pdb().set_trace(sys._getframe().f_back)
Guido van Rossum35771131992-09-08 11:59:04 +00001252
1253# Post-Mortem interface
1254
Facundo Batistac54aec12008-03-08 16:50:27 +00001255def post_mortem(t=None):
1256 # handling the default
1257 if t is None:
1258 # sys.exc_info() returns (type, value, traceback) if an exception is
1259 # being handled, otherwise it returns None
1260 t = sys.exc_info()[2]
1261 if t is None:
1262 raise ValueError("A valid traceback must be passed if no "
1263 "exception is being handled")
1264
Tim Peters2344fae2001-01-15 00:50:52 +00001265 p = Pdb()
1266 p.reset()
Benjamin Petersonc18574c2008-10-22 21:16:34 +00001267 p.interaction(None, t)
Guido van Rossum35771131992-09-08 11:59:04 +00001268
1269def pm():
Tim Peters2344fae2001-01-15 00:50:52 +00001270 post_mortem(sys.last_traceback)
Guido van Rossum35771131992-09-08 11:59:04 +00001271
1272
1273# Main program for testing
1274
Guido van Rossum23efba41992-01-27 16:58:47 +00001275TESTCMD = 'import x; x.main()'
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001276
Guido van Rossum921c8241992-01-10 14:54:42 +00001277def test():
Tim Peters2344fae2001-01-15 00:50:52 +00001278 run(TESTCMD)
Guido van Rossume61fa0a1993-10-22 13:56:35 +00001279
1280# print help
1281def help():
Tim Peters2344fae2001-01-15 00:50:52 +00001282 for dirname in sys.path:
1283 fullname = os.path.join(dirname, 'pdb.doc')
1284 if os.path.exists(fullname):
1285 sts = os.system('${PAGER-more} '+fullname)
1286 if sts: print '*** Pager exit status:', sts
1287 break
1288 else:
1289 print 'Sorry, can\'t find the help file "pdb.doc"',
1290 print 'along the Python search path'
Guido van Rossumf17361d1996-07-30 16:28:13 +00001291
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001292def main():
Benjamin Peterson13be2cf2008-03-26 11:57:47 +00001293 if not sys.argv[1:] or sys.argv[1] in ("--help", "-h"):
Tim Peters2344fae2001-01-15 00:50:52 +00001294 print "usage: pdb.py scriptfile [arg] ..."
1295 sys.exit(2)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001296
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001297 mainpyfile = sys.argv[1] # Get script filename
1298 if not os.path.exists(mainpyfile):
1299 print 'Error:', mainpyfile, 'does not exist'
Tim Peters2344fae2001-01-15 00:50:52 +00001300 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001301
Tim Peters2344fae2001-01-15 00:50:52 +00001302 del sys.argv[0] # Hide "pdb.py" from argument list
Guido van Rossumec577d51996-09-10 17:39:34 +00001303
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001304 # Replace pdb's dir with script's dir in front of module search path.
1305 sys.path[0] = os.path.dirname(mainpyfile)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001306
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001307 # Note on saving/restoring sys.argv: it's a good idea when sys.argv was
1308 # modified by the script being debugged. It's a bad idea when it was
Georg Brandl58152202009-05-05 09:06:02 +00001309 # changed by the user from the command line. There is a "restart" command
1310 # which allows explicit specification of command line arguments.
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001311 pdb = Pdb()
Georg Brandl50775992010-08-01 19:33:15 +00001312 while True:
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001313 try:
1314 pdb._runscript(mainpyfile)
1315 if pdb._user_requested_quit:
1316 break
Tim Peterse718f612004-10-12 21:51:32 +00001317 print "The program finished and will be restarted"
Georg Brandl8e84c652007-03-13 21:08:15 +00001318 except Restart:
1319 print "Restarting", mainpyfile, "with arguments:"
1320 print "\t" + " ".join(sys.argv[1:])
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001321 except SystemExit:
1322 # In most cases SystemExit does not warrant a post-mortem session.
1323 print "The program exited via sys.exit(). Exit status: ",
1324 print sys.exc_info()[1]
Terry Jan Reedy23ae4882015-09-05 19:13:17 -04001325 except SyntaxError:
1326 traceback.print_exc()
1327 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001328 except:
1329 traceback.print_exc()
1330 print "Uncaught exception. Entering post mortem debugging"
1331 print "Running 'cont' or 'step' will restart the program"
1332 t = sys.exc_info()[2]
Benjamin Petersonc18574c2008-10-22 21:16:34 +00001333 pdb.interaction(None, t)
Georg Brandl58152202009-05-05 09:06:02 +00001334 print "Post mortem debugger finished. The " + mainpyfile + \
1335 " will be restarted"
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001336
1337
1338# When invoked as main program, invoke the debugger on a script
Georg Brandlb6ae6aa2007-03-13 21:58:44 +00001339if __name__ == '__main__':
1340 import pdb
1341 pdb.main()