blob: 3e5e8984c13b2432f7ae2e3a1873cb8fb30ad439 [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 Brandl19564802006-05-10 17:13:20 +000061 def __init__(self, completekey='tab', stdin=None, stdout=None):
Tim Peters2344fae2001-01-15 00:50:52 +000062 bdb.Bdb.__init__(self)
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
98 self.commands_doprompt = {} # for each bp num, tells if the prompt must be disp. after execing the cmd list
99 self.commands_silent = {} # for each bp num, tells if the stack trace must be disp. after execing the cmd list
100 self.commands_defining = False # True while in the process of defining a command list
101 self.commands_bnum = None # The breakpoint number for which we are defining a list
102
Tim Peters2344fae2001-01-15 00:50:52 +0000103 def reset(self):
104 bdb.Bdb.reset(self)
105 self.forget()
Guido van Rossum23efba41992-01-27 16:58:47 +0000106
Tim Peters2344fae2001-01-15 00:50:52 +0000107 def forget(self):
108 self.lineno = None
109 self.stack = []
110 self.curindex = 0
111 self.curframe = None
Guido van Rossum2424f851998-09-11 22:50:09 +0000112
Tim Peters2344fae2001-01-15 00:50:52 +0000113 def setup(self, f, t):
114 self.forget()
115 self.stack, self.curindex = self.get_stack(f, t)
116 self.curframe = self.stack[self.curindex][0]
117 self.execRcLines()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000118
Tim Peters2344fae2001-01-15 00:50:52 +0000119 # Can be executed earlier than 'setup' if desired
120 def execRcLines(self):
121 if self.rcLines:
122 # Make local copy because of recursion
123 rcLines = self.rcLines
124 # executed only once
125 self.rcLines = []
126 for line in rcLines:
127 line = line[:-1]
Guido van Rossum08454592002-07-12 13:10:53 +0000128 if len(line) > 0 and line[0] != '#':
129 self.onecmd(line)
Guido van Rossum2424f851998-09-11 22:50:09 +0000130
Tim Peters280488b2002-08-23 18:19:30 +0000131 # Override Bdb methods
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000132
133 def user_call(self, frame, argument_list):
134 """This method is called when there is the remote possibility
135 that we ever need to stop in this function."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000136 if self._wait_for_mainpyfile:
137 return
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000138 if self.stop_here(frame):
Georg Brandl19564802006-05-10 17:13:20 +0000139 print >>self.stdout, '--Call--'
Michael W. Hudson01eb85c2003-01-31 17:48:29 +0000140 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000141
Tim Peters2344fae2001-01-15 00:50:52 +0000142 def user_line(self, frame):
143 """This function is called when we stop or break at this line."""
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000144 if self._wait_for_mainpyfile:
145 if (self.mainpyfile != self.canonic(frame.f_code.co_filename)
146 or frame.f_lineno<= 0):
147 return
148 self._wait_for_mainpyfile = 0
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000149 if self.bp_commands(frame):
150 self.interaction(frame, None)
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000151
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000152 def bp_commands(self,frame):
153 """ Call every command that was set for the current active breakpoint (if there is one)
154 Returns True if the normal interaction function must be called, False otherwise """
155 #self.currentbp is set in bdb.py in bdb.break_here if a breakpoint was hit
156 if getattr(self,"currentbp",False) and self.currentbp in self.commands:
157 currentbp = self.currentbp
158 self.currentbp = 0
159 lastcmd_back = self.lastcmd
160 self.setup(frame, None)
161 for line in self.commands[currentbp]:
162 self.onecmd(line)
163 self.lastcmd = lastcmd_back
164 if not self.commands_silent[currentbp]:
165 self.print_stack_entry(self.stack[self.curindex])
166 if self.commands_doprompt[currentbp]:
167 self.cmdloop()
168 self.forget()
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000169 return
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000170 return 1
Guido van Rossum9e1ee971997-07-11 13:43:53 +0000171
Tim Peters2344fae2001-01-15 00:50:52 +0000172 def user_return(self, frame, return_value):
173 """This function is called when a return trap is set here."""
174 frame.f_locals['__return__'] = return_value
Georg Brandl19564802006-05-10 17:13:20 +0000175 print >>self.stdout, '--Return--'
Tim Peters2344fae2001-01-15 00:50:52 +0000176 self.interaction(frame, None)
Guido van Rossum2424f851998-09-11 22:50:09 +0000177
Brett Cannonc6a30ec2008-08-01 01:36:47 +0000178 def user_exception(self, frame, exc_info):
179 exc_type, exc_value, exc_traceback = exc_info
Tim Peters2344fae2001-01-15 00:50:52 +0000180 """This function is called if an exception occurs,
181 but only if we are to stop at or just below this level."""
182 frame.f_locals['__exception__'] = exc_type, exc_value
183 if type(exc_type) == type(''):
184 exc_type_name = exc_type
185 else: exc_type_name = exc_type.__name__
Georg Brandl19564802006-05-10 17:13:20 +0000186 print >>self.stdout, exc_type_name + ':', _saferepr(exc_value)
Tim Peters2344fae2001-01-15 00:50:52 +0000187 self.interaction(frame, exc_traceback)
Guido van Rossum2424f851998-09-11 22:50:09 +0000188
Tim Peters2344fae2001-01-15 00:50:52 +0000189 # General interaction function
190
191 def interaction(self, frame, traceback):
192 self.setup(frame, traceback)
193 self.print_stack_entry(self.stack[self.curindex])
194 self.cmdloop()
195 self.forget()
196
Georg Brandl9b08e052009-04-05 21:21:05 +0000197 def displayhook(self, obj):
198 """Custom displayhook for the exec in default(), which prevents
199 assignment of the _ variable in the builtins.
200 """
Georg Brandlf004d9d2009-10-27 15:39:53 +0000201 # reproduce the behavior of the standard displayhook, not printing None
202 if obj is not None:
203 print repr(obj)
Georg Brandl9b08e052009-04-05 21:21:05 +0000204
Tim Peters2344fae2001-01-15 00:50:52 +0000205 def default(self, line):
206 if line[:1] == '!': line = line[1:]
207 locals = self.curframe.f_locals
208 globals = self.curframe.f_globals
209 try:
210 code = compile(line + '\n', '<stdin>', 'single')
Amaury Forgeot d'Arcff0f2672008-01-15 21:25:11 +0000211 save_stdout = sys.stdout
212 save_stdin = sys.stdin
Georg Brandl9b08e052009-04-05 21:21:05 +0000213 save_displayhook = sys.displayhook
Guido van Rossumcad37242008-01-15 17:59:29 +0000214 try:
215 sys.stdin = self.stdin
216 sys.stdout = self.stdout
Georg Brandl9b08e052009-04-05 21:21:05 +0000217 sys.displayhook = self.displayhook
Guido van Rossumcad37242008-01-15 17:59:29 +0000218 exec code in globals, locals
219 finally:
220 sys.stdout = save_stdout
221 sys.stdin = save_stdin
Georg Brandl9b08e052009-04-05 21:21:05 +0000222 sys.displayhook = save_displayhook
Tim Peters2344fae2001-01-15 00:50:52 +0000223 except:
224 t, v = sys.exc_info()[:2]
225 if type(t) == type(''):
226 exc_type_name = t
227 else: exc_type_name = t.__name__
Georg Brandl19564802006-05-10 17:13:20 +0000228 print >>self.stdout, '***', exc_type_name + ':', v
Tim Peters2344fae2001-01-15 00:50:52 +0000229
230 def precmd(self, line):
231 """Handle alias expansion and ';;' separator."""
Guido van Rossum08454592002-07-12 13:10:53 +0000232 if not line.strip():
Tim Peters2344fae2001-01-15 00:50:52 +0000233 return line
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000234 args = line.split()
Raymond Hettinger54f02222002-06-01 14:18:47 +0000235 while args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000236 line = self.aliases[args[0]]
237 ii = 1
238 for tmpArg in args[1:]:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000239 line = line.replace("%" + str(ii),
Tim Peters2344fae2001-01-15 00:50:52 +0000240 tmpArg)
241 ii = ii + 1
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000242 line = line.replace("%*", ' '.join(args[1:]))
243 args = line.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000244 # split into ';;' separated commands
245 # unless it's an alias command
246 if args[0] != 'alias':
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000247 marker = line.find(';;')
Tim Peters2344fae2001-01-15 00:50:52 +0000248 if marker >= 0:
249 # queue up everything after marker
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000250 next = line[marker+2:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000251 self.cmdqueue.append(next)
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000252 line = line[:marker].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000253 return line
254
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000255 def onecmd(self, line):
256 """Interpret the argument as though it had been typed in response
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000257 to the prompt.
258
Andrew M. Kuchling9aed98f2006-07-27 12:18:20 +0000259 Checks whether this line is typed at the normal prompt or in
Tim Petersdaea0352006-07-27 15:11:00 +0000260 a breakpoint command list definition.
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000261 """
262 if not self.commands_defining:
263 return cmd.Cmd.onecmd(self, line)
264 else:
265 return self.handle_command_def(line)
266
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000267 def handle_command_def(self,line):
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000268 """ Handles one command line during command list definition. """
269 cmd, arg, line = self.parseline(line)
270 if cmd == 'silent':
271 self.commands_silent[self.commands_bnum] = True
272 return # continue to handle other cmd def in the cmd list
273 elif cmd == 'end':
274 self.cmdqueue = []
275 return 1 # end of cmd list
276 cmdlist = self.commands[self.commands_bnum]
277 if (arg):
278 cmdlist.append(cmd+' '+arg)
279 else:
280 cmdlist.append(cmd)
281 # Determine if we must stop
282 try:
283 func = getattr(self, 'do_' + cmd)
284 except AttributeError:
285 func = self.default
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000286 if func.func_name in self.commands_resuming : # one of the resuming commands.
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000287 self.commands_doprompt[self.commands_bnum] = False
288 self.cmdqueue = []
289 return 1
Martin v. Löwis1a00e182006-04-17 19:18:18 +0000290 return
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000291
Tim Peters2344fae2001-01-15 00:50:52 +0000292 # Command definitions, called by cmdloop()
293 # The argument is the remaining string on the command line
294 # Return true to exit from the command loop
295
296 do_h = cmd.Cmd.do_help
297
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000298 def do_commands(self, arg):
299 """Defines a list of commands associated to a breakpoint
300 Those commands will be executed whenever the breakpoint causes the program to stop execution."""
301 if not arg:
302 bnum = len(bdb.Breakpoint.bpbynumber)-1
303 else:
304 try:
305 bnum = int(arg)
306 except:
Georg Brandl19564802006-05-10 17:13:20 +0000307 print >>self.stdout, "Usage : commands [bnum]\n ...\n end"
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000308 return
309 self.commands_bnum = bnum
310 self.commands[bnum] = []
311 self.commands_doprompt[bnum] = True
312 self.commands_silent[bnum] = False
313 prompt_back = self.prompt
314 self.prompt = '(com) '
315 self.commands_defining = True
316 self.cmdloop()
317 self.commands_defining = False
318 self.prompt = prompt_back
319
Tim Peters2344fae2001-01-15 00:50:52 +0000320 def do_break(self, arg, temporary = 0):
321 # break [ ([filename:]lineno | function) [, "condition"] ]
322 if not arg:
323 if self.breaks: # There's at least one
Georg Brandl19564802006-05-10 17:13:20 +0000324 print >>self.stdout, "Num Type Disp Enb Where"
Tim Peters2344fae2001-01-15 00:50:52 +0000325 for bp in bdb.Breakpoint.bpbynumber:
326 if bp:
Georg Brandl19564802006-05-10 17:13:20 +0000327 bp.bpprint(self.stdout)
Tim Peters2344fae2001-01-15 00:50:52 +0000328 return
329 # parse arguments; comma has lowest precedence
330 # and cannot occur in filename
331 filename = None
332 lineno = None
333 cond = None
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000334 comma = arg.find(',')
Tim Peters2344fae2001-01-15 00:50:52 +0000335 if comma > 0:
336 # parse stuff after comma: "condition"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000337 cond = arg[comma+1:].lstrip()
338 arg = arg[:comma].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000339 # parse stuff before comma: [filename:]lineno | function
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000340 colon = arg.rfind(':')
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000341 funcname = None
Tim Peters2344fae2001-01-15 00:50:52 +0000342 if colon >= 0:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000343 filename = arg[:colon].rstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000344 f = self.lookupmodule(filename)
345 if not f:
Georg Brandl19564802006-05-10 17:13:20 +0000346 print >>self.stdout, '*** ', repr(filename),
347 print >>self.stdout, 'not found from sys.path'
Tim Peters2344fae2001-01-15 00:50:52 +0000348 return
349 else:
350 filename = f
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000351 arg = arg[colon+1:].lstrip()
Tim Peters2344fae2001-01-15 00:50:52 +0000352 try:
353 lineno = int(arg)
354 except ValueError, msg:
Georg Brandl19564802006-05-10 17:13:20 +0000355 print >>self.stdout, '*** Bad lineno:', arg
Tim Peters2344fae2001-01-15 00:50:52 +0000356 return
357 else:
358 # no colon; can be lineno or function
359 try:
360 lineno = int(arg)
361 except ValueError:
362 try:
363 func = eval(arg,
364 self.curframe.f_globals,
365 self.curframe.f_locals)
366 except:
367 func = arg
368 try:
369 if hasattr(func, 'im_func'):
370 func = func.im_func
371 code = func.func_code
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000372 #use co_name to identify the bkpt (function names
373 #could be aliased, but co_name is invariant)
374 funcname = code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000375 lineno = code.co_firstlineno
376 filename = code.co_filename
377 except:
378 # last thing to try
379 (ok, filename, ln) = self.lineinfo(arg)
380 if not ok:
Georg Brandl19564802006-05-10 17:13:20 +0000381 print >>self.stdout, '*** The specified object',
382 print >>self.stdout, repr(arg),
383 print >>self.stdout, 'is not a function'
384 print >>self.stdout, 'or was not found along sys.path.'
Tim Peters2344fae2001-01-15 00:50:52 +0000385 return
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000386 funcname = ok # ok contains a function name
Tim Peters2344fae2001-01-15 00:50:52 +0000387 lineno = int(ln)
388 if not filename:
389 filename = self.defaultFile()
390 # Check for reasonable breakpoint
391 line = self.checkline(filename, lineno)
392 if line:
393 # now set the break point
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000394 err = self.set_break(filename, line, temporary, cond, funcname)
Georg Brandl19564802006-05-10 17:13:20 +0000395 if err: print >>self.stdout, '***', err
Tim Peters2344fae2001-01-15 00:50:52 +0000396 else:
397 bp = self.get_breaks(filename, line)[-1]
Georg Brandl19564802006-05-10 17:13:20 +0000398 print >>self.stdout, "Breakpoint %d at %s:%d" % (bp.number,
399 bp.file,
400 bp.line)
Tim Peters2344fae2001-01-15 00:50:52 +0000401
402 # To be overridden in derived debuggers
403 def defaultFile(self):
404 """Produce a reasonable default."""
405 filename = self.curframe.f_code.co_filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000406 if filename == '<string>' and self.mainpyfile:
407 filename = self.mainpyfile
Tim Peters2344fae2001-01-15 00:50:52 +0000408 return filename
409
410 do_b = do_break
411
412 def do_tbreak(self, arg):
413 self.do_break(arg, 1)
414
415 def lineinfo(self, identifier):
416 failed = (None, None, None)
417 # Input is identifier, may be in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000418 idstring = identifier.split("'")
Tim Peters2344fae2001-01-15 00:50:52 +0000419 if len(idstring) == 1:
420 # not in single quotes
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000421 id = idstring[0].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000422 elif len(idstring) == 3:
423 # quoted
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000424 id = idstring[1].strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000425 else:
426 return failed
427 if id == '': return failed
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000428 parts = id.split('.')
Tim Peters2344fae2001-01-15 00:50:52 +0000429 # Protection for derived debuggers
430 if parts[0] == 'self':
431 del parts[0]
432 if len(parts) == 0:
433 return failed
434 # Best first guess at file to look at
435 fname = self.defaultFile()
436 if len(parts) == 1:
437 item = parts[0]
438 else:
439 # More than one part.
440 # First is module, second is method/class
441 f = self.lookupmodule(parts[0])
442 if f:
443 fname = f
444 item = parts[1]
445 answer = find_function(item, fname)
446 return answer or failed
447
448 def checkline(self, filename, lineno):
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000449 """Check whether specified line seems to be executable.
Tim Peters2344fae2001-01-15 00:50:52 +0000450
Johannes Gijsbers4a9faa12004-08-30 13:29:44 +0000451 Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank
452 line or EOF). Warning: testing is not comprehensive.
453 """
Nick Coghlan30327242008-12-14 11:30:16 +0000454 line = linecache.getline(filename, lineno, self.curframe.f_globals)
Tim Peters2344fae2001-01-15 00:50:52 +0000455 if not line:
Georg Brandl19564802006-05-10 17:13:20 +0000456 print >>self.stdout, 'End of file'
Tim Peters2344fae2001-01-15 00:50:52 +0000457 return 0
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000458 line = line.strip()
Tim Peters2344fae2001-01-15 00:50:52 +0000459 # Don't allow setting breakpoint at a blank line
Guido van Rossum08454592002-07-12 13:10:53 +0000460 if (not line or (line[0] == '#') or
461 (line[:3] == '"""') or line[:3] == "'''"):
Georg Brandl19564802006-05-10 17:13:20 +0000462 print >>self.stdout, '*** Blank or comment'
Tim Peters2344fae2001-01-15 00:50:52 +0000463 return 0
Tim Peters2344fae2001-01-15 00:50:52 +0000464 return lineno
465
466 def do_enable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000467 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000468 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000469 try:
470 i = int(i)
471 except ValueError:
Georg Brandl19564802006-05-10 17:13:20 +0000472 print >>self.stdout, 'Breakpoint index %r is not a number' % i
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000473 continue
474
475 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Georg Brandl19564802006-05-10 17:13:20 +0000476 print >>self.stdout, 'No breakpoint numbered', i
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000477 continue
478
479 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000480 if bp:
481 bp.enable()
482
483 def do_disable(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000484 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000485 for i in args:
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000486 try:
487 i = int(i)
488 except ValueError:
Georg Brandl19564802006-05-10 17:13:20 +0000489 print >>self.stdout, 'Breakpoint index %r is not a number' % i
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000490 continue
Tim Petersf545baa2003-06-15 23:26:30 +0000491
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000492 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Georg Brandl19564802006-05-10 17:13:20 +0000493 print >>self.stdout, 'No breakpoint numbered', i
Andrew M. Kuchlingb1f8bab2003-05-22 14:46:12 +0000494 continue
495
496 bp = bdb.Breakpoint.bpbynumber[i]
Tim Peters2344fae2001-01-15 00:50:52 +0000497 if bp:
498 bp.disable()
499
500 def do_condition(self, arg):
501 # arg is breakpoint number and condition
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000502 args = arg.split(' ', 1)
Georg Brandle4980832007-01-22 21:23:41 +0000503 try:
504 bpnum = int(args[0].strip())
505 except ValueError:
506 # something went wrong
507 print >>self.stdout, \
508 'Breakpoint index %r is not a number' % args[0]
Georg Brandlb2783182007-03-11 08:28:46 +0000509 return
Tim Peters2344fae2001-01-15 00:50:52 +0000510 try:
511 cond = args[1]
512 except:
513 cond = None
Collin Winter2faa9e12007-03-11 16:00:20 +0000514 try:
515 bp = bdb.Breakpoint.bpbynumber[bpnum]
516 except IndexError:
517 print >>self.stdout, 'Breakpoint index %r is not valid' % args[0]
518 return
Tim Peters2344fae2001-01-15 00:50:52 +0000519 if bp:
520 bp.cond = cond
521 if not cond:
Georg Brandl19564802006-05-10 17:13:20 +0000522 print >>self.stdout, 'Breakpoint', bpnum,
523 print >>self.stdout, 'is now unconditional.'
Tim Peters2344fae2001-01-15 00:50:52 +0000524
525 def do_ignore(self,arg):
526 """arg is bp number followed by ignore count."""
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000527 args = arg.split()
Georg Brandle4980832007-01-22 21:23:41 +0000528 try:
529 bpnum = int(args[0].strip())
530 except ValueError:
531 # something went wrong
532 print >>self.stdout, \
533 'Breakpoint index %r is not a number' % args[0]
Georg Brandlb2783182007-03-11 08:28:46 +0000534 return
Tim Peters2344fae2001-01-15 00:50:52 +0000535 try:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000536 count = int(args[1].strip())
Tim Peters2344fae2001-01-15 00:50:52 +0000537 except:
538 count = 0
Collin Winter2faa9e12007-03-11 16:00:20 +0000539 try:
540 bp = bdb.Breakpoint.bpbynumber[bpnum]
541 except IndexError:
542 print >>self.stdout, 'Breakpoint index %r is not valid' % args[0]
543 return
Tim Peters2344fae2001-01-15 00:50:52 +0000544 if bp:
545 bp.ignore = count
Guido van Rossum08454592002-07-12 13:10:53 +0000546 if count > 0:
Tim Peters2344fae2001-01-15 00:50:52 +0000547 reply = 'Will ignore next '
Guido van Rossum08454592002-07-12 13:10:53 +0000548 if count > 1:
Tim Peters2344fae2001-01-15 00:50:52 +0000549 reply = reply + '%d crossings' % count
550 else:
551 reply = reply + '1 crossing'
Georg Brandl19564802006-05-10 17:13:20 +0000552 print >>self.stdout, reply + ' of breakpoint %d.' % bpnum
Tim Peters2344fae2001-01-15 00:50:52 +0000553 else:
Georg Brandl19564802006-05-10 17:13:20 +0000554 print >>self.stdout, 'Will stop next time breakpoint',
555 print >>self.stdout, bpnum, 'is reached.'
Tim Peters2344fae2001-01-15 00:50:52 +0000556
557 def do_clear(self, arg):
558 """Three possibilities, tried in this order:
559 clear -> clear all breaks, ask for confirmation
560 clear file:lineno -> clear all breaks at file:lineno
561 clear bpno bpno ... -> clear breakpoints by number"""
562 if not arg:
563 try:
564 reply = raw_input('Clear all breaks? ')
565 except EOFError:
566 reply = 'no'
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000567 reply = reply.strip().lower()
Tim Peters2344fae2001-01-15 00:50:52 +0000568 if reply in ('y', 'yes'):
569 self.clear_all_breaks()
570 return
571 if ':' in arg:
572 # Make sure it works for "clear C:\foo\bar.py:12"
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000573 i = arg.rfind(':')
Tim Peters2344fae2001-01-15 00:50:52 +0000574 filename = arg[:i]
575 arg = arg[i+1:]
576 try:
577 lineno = int(arg)
Georg Brandl23d9d452006-05-03 18:12:33 +0000578 except ValueError:
Tim Peters2344fae2001-01-15 00:50:52 +0000579 err = "Invalid line number (%s)" % arg
580 else:
581 err = self.clear_break(filename, lineno)
Georg Brandl19564802006-05-10 17:13:20 +0000582 if err: print >>self.stdout, '***', err
Tim Peters2344fae2001-01-15 00:50:52 +0000583 return
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000584 numberlist = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000585 for i in numberlist:
Georg Brandl23d9d452006-05-03 18:12:33 +0000586 try:
587 i = int(i)
588 except ValueError:
Georg Brandl19564802006-05-10 17:13:20 +0000589 print >>self.stdout, 'Breakpoint index %r is not a number' % i
Georg Brandl23d9d452006-05-03 18:12:33 +0000590 continue
591
Georg Brandl6d2b3462005-08-24 07:36:17 +0000592 if not (0 <= i < len(bdb.Breakpoint.bpbynumber)):
Georg Brandl19564802006-05-10 17:13:20 +0000593 print >>self.stdout, 'No breakpoint numbered', i
Georg Brandl6d2b3462005-08-24 07:36:17 +0000594 continue
Tim Peters2344fae2001-01-15 00:50:52 +0000595 err = self.clear_bpbynumber(i)
596 if err:
Georg Brandl19564802006-05-10 17:13:20 +0000597 print >>self.stdout, '***', err
Tim Peters2344fae2001-01-15 00:50:52 +0000598 else:
Georg Brandl19564802006-05-10 17:13:20 +0000599 print >>self.stdout, 'Deleted breakpoint', i
Tim Peters2344fae2001-01-15 00:50:52 +0000600 do_cl = do_clear # 'c' is already an abbreviation for 'continue'
601
602 def do_where(self, arg):
603 self.print_stack_trace()
604 do_w = do_where
Guido van Rossum6bd68352001-01-20 17:57:37 +0000605 do_bt = do_where
Tim Peters2344fae2001-01-15 00:50:52 +0000606
607 def do_up(self, arg):
608 if self.curindex == 0:
Georg Brandl19564802006-05-10 17:13:20 +0000609 print >>self.stdout, '*** Oldest frame'
Tim Peters2344fae2001-01-15 00:50:52 +0000610 else:
611 self.curindex = self.curindex - 1
612 self.curframe = self.stack[self.curindex][0]
613 self.print_stack_entry(self.stack[self.curindex])
614 self.lineno = None
615 do_u = do_up
616
617 def do_down(self, arg):
618 if self.curindex + 1 == len(self.stack):
Georg Brandl19564802006-05-10 17:13:20 +0000619 print >>self.stdout, '*** Newest frame'
Tim Peters2344fae2001-01-15 00:50:52 +0000620 else:
621 self.curindex = self.curindex + 1
622 self.curframe = self.stack[self.curindex][0]
623 self.print_stack_entry(self.stack[self.curindex])
624 self.lineno = None
625 do_d = do_down
626
Benjamin Peterson98353942008-05-11 14:13:25 +0000627 def do_until(self, arg):
628 self.set_until(self.curframe)
629 return 1
630 do_unt = do_until
631
Tim Peters2344fae2001-01-15 00:50:52 +0000632 def do_step(self, arg):
633 self.set_step()
634 return 1
635 do_s = do_step
636
637 def do_next(self, arg):
638 self.set_next(self.curframe)
639 return 1
640 do_n = do_next
641
Georg Brandl8e84c652007-03-13 21:08:15 +0000642 def do_run(self, arg):
643 """Restart program by raising an exception to be caught in the main debugger
644 loop. If arguments were given, set them in sys.argv."""
645 if arg:
646 import shlex
647 argv0 = sys.argv[0:1]
648 sys.argv = shlex.split(arg)
649 sys.argv[:0] = argv0
650 raise Restart
651
652 do_restart = do_run
653
Tim Peters2344fae2001-01-15 00:50:52 +0000654 def do_return(self, arg):
655 self.set_return(self.curframe)
656 return 1
657 do_r = do_return
658
659 def do_continue(self, arg):
660 self.set_continue()
661 return 1
662 do_c = do_cont = do_continue
663
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000664 def do_jump(self, arg):
665 if self.curindex + 1 != len(self.stack):
Georg Brandl19564802006-05-10 17:13:20 +0000666 print >>self.stdout, "*** You can only jump within the bottom frame"
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000667 return
668 try:
669 arg = int(arg)
670 except ValueError:
Georg Brandl19564802006-05-10 17:13:20 +0000671 print >>self.stdout, "*** The 'jump' command requires a line number."
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000672 else:
673 try:
674 # Do the jump, fix up our copy of the stack, and display the
675 # new position
676 self.curframe.f_lineno = arg
677 self.stack[self.curindex] = self.stack[self.curindex][0], arg
678 self.print_stack_entry(self.stack[self.curindex])
679 except ValueError, e:
Georg Brandl19564802006-05-10 17:13:20 +0000680 print >>self.stdout, '*** Jump failed:', e
Michael W. Hudsoncfd38842002-12-17 16:15:34 +0000681 do_j = do_jump
682
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000683 def do_debug(self, arg):
684 sys.settrace(None)
685 globals = self.curframe.f_globals
686 locals = self.curframe.f_locals
Guido van Rossumcad37242008-01-15 17:59:29 +0000687 p = Pdb(self.completekey, self.stdin, self.stdout)
Guido van Rossumed538d82003-04-09 19:36:34 +0000688 p.prompt = "(%s) " % self.prompt.strip()
Georg Brandl19564802006-05-10 17:13:20 +0000689 print >>self.stdout, "ENTERING RECURSIVE DEBUGGER"
Guido van Rossumed538d82003-04-09 19:36:34 +0000690 sys.call_tracing(p.run, (arg, globals, locals))
Georg Brandl19564802006-05-10 17:13:20 +0000691 print >>self.stdout, "LEAVING RECURSIVE DEBUGGER"
Guido van Rossuma12fe4e2003-04-09 19:06:21 +0000692 sys.settrace(self.trace_dispatch)
693 self.lastcmd = p.lastcmd
694
Tim Peters2344fae2001-01-15 00:50:52 +0000695 def do_quit(self, arg):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000696 self._user_requested_quit = 1
Tim Peters2344fae2001-01-15 00:50:52 +0000697 self.set_quit()
698 return 1
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000699
Tim Peters2344fae2001-01-15 00:50:52 +0000700 do_q = do_quit
Guido van Rossumd1c08f32002-04-15 00:48:24 +0000701 do_exit = do_quit
Tim Peters2344fae2001-01-15 00:50:52 +0000702
Guido van Rossumeef26072003-01-13 21:13:55 +0000703 def do_EOF(self, arg):
Georg Brandl19564802006-05-10 17:13:20 +0000704 print >>self.stdout
Johannes Gijsbers25b38c82004-10-12 18:12:09 +0000705 self._user_requested_quit = 1
Guido van Rossumeef26072003-01-13 21:13:55 +0000706 self.set_quit()
707 return 1
708
Tim Peters2344fae2001-01-15 00:50:52 +0000709 def do_args(self, arg):
710 f = self.curframe
711 co = f.f_code
712 dict = f.f_locals
713 n = co.co_argcount
714 if co.co_flags & 4: n = n+1
715 if co.co_flags & 8: n = n+1
716 for i in range(n):
717 name = co.co_varnames[i]
Georg Brandl19564802006-05-10 17:13:20 +0000718 print >>self.stdout, name, '=',
719 if name in dict: print >>self.stdout, dict[name]
720 else: print >>self.stdout, "*** undefined ***"
Tim Peters2344fae2001-01-15 00:50:52 +0000721 do_a = do_args
Guido van Rossum2424f851998-09-11 22:50:09 +0000722
Tim Peters2344fae2001-01-15 00:50:52 +0000723 def do_retval(self, arg):
Raymond Hettinger54f02222002-06-01 14:18:47 +0000724 if '__return__' in self.curframe.f_locals:
Georg Brandl19564802006-05-10 17:13:20 +0000725 print >>self.stdout, self.curframe.f_locals['__return__']
Tim Peters2344fae2001-01-15 00:50:52 +0000726 else:
Georg Brandl19564802006-05-10 17:13:20 +0000727 print >>self.stdout, '*** Not yet returned!'
Tim Peters2344fae2001-01-15 00:50:52 +0000728 do_rv = do_retval
Guido van Rossum2424f851998-09-11 22:50:09 +0000729
Barry Warsaw210bd202002-11-05 22:40:20 +0000730 def _getval(self, arg):
Tim Peters2344fae2001-01-15 00:50:52 +0000731 try:
Barry Warsaw210bd202002-11-05 22:40:20 +0000732 return eval(arg, self.curframe.f_globals,
733 self.curframe.f_locals)
Tim Peters2344fae2001-01-15 00:50:52 +0000734 except:
735 t, v = sys.exc_info()[:2]
Barry Warsaw210bd202002-11-05 22:40:20 +0000736 if isinstance(t, str):
Tim Peters2344fae2001-01-15 00:50:52 +0000737 exc_type_name = t
738 else: exc_type_name = t.__name__
Georg Brandl19564802006-05-10 17:13:20 +0000739 print >>self.stdout, '***', exc_type_name + ':', repr(v)
Barry Warsaw210bd202002-11-05 22:40:20 +0000740 raise
Guido van Rossum2424f851998-09-11 22:50:09 +0000741
Barry Warsaw210bd202002-11-05 22:40:20 +0000742 def do_p(self, arg):
743 try:
Georg Brandl19564802006-05-10 17:13:20 +0000744 print >>self.stdout, repr(self._getval(arg))
Barry Warsaw210bd202002-11-05 22:40:20 +0000745 except:
746 pass
747
748 def do_pp(self, arg):
749 try:
Georg Brandl19564802006-05-10 17:13:20 +0000750 pprint.pprint(self._getval(arg), self.stdout)
Barry Warsaw210bd202002-11-05 22:40:20 +0000751 except:
752 pass
Guido van Rossum2424f851998-09-11 22:50:09 +0000753
Tim Peters2344fae2001-01-15 00:50:52 +0000754 def do_list(self, arg):
755 self.lastcmd = 'list'
756 last = None
757 if arg:
758 try:
759 x = eval(arg, {}, {})
760 if type(x) == type(()):
761 first, last = x
762 first = int(first)
763 last = int(last)
764 if last < first:
765 # Assume it's a count
766 last = first + last
767 else:
768 first = max(1, int(x) - 5)
769 except:
Georg Brandl19564802006-05-10 17:13:20 +0000770 print >>self.stdout, '*** Error in argument:', repr(arg)
Tim Peters2344fae2001-01-15 00:50:52 +0000771 return
772 elif self.lineno is None:
773 first = max(1, self.curframe.f_lineno - 5)
774 else:
775 first = self.lineno + 1
776 if last is None:
777 last = first + 10
778 filename = self.curframe.f_code.co_filename
779 breaklist = self.get_file_breaks(filename)
780 try:
781 for lineno in range(first, last+1):
Nick Coghlan30327242008-12-14 11:30:16 +0000782 line = linecache.getline(filename, lineno, self.curframe.f_globals)
Tim Peters2344fae2001-01-15 00:50:52 +0000783 if not line:
Georg Brandl19564802006-05-10 17:13:20 +0000784 print >>self.stdout, '[EOF]'
Tim Peters2344fae2001-01-15 00:50:52 +0000785 break
786 else:
Walter Dörwald70a6b492004-02-12 17:35:32 +0000787 s = repr(lineno).rjust(3)
Tim Peters2344fae2001-01-15 00:50:52 +0000788 if len(s) < 4: s = s + ' '
789 if lineno in breaklist: s = s + 'B'
790 else: s = s + ' '
791 if lineno == self.curframe.f_lineno:
792 s = s + '->'
Georg Brandl19564802006-05-10 17:13:20 +0000793 print >>self.stdout, s + '\t' + line,
Tim Peters2344fae2001-01-15 00:50:52 +0000794 self.lineno = lineno
795 except KeyboardInterrupt:
796 pass
797 do_l = do_list
Guido van Rossum2424f851998-09-11 22:50:09 +0000798
Tim Peters2344fae2001-01-15 00:50:52 +0000799 def do_whatis(self, arg):
800 try:
801 value = eval(arg, self.curframe.f_globals,
802 self.curframe.f_locals)
803 except:
804 t, v = sys.exc_info()[:2]
805 if type(t) == type(''):
806 exc_type_name = t
807 else: exc_type_name = t.__name__
Georg Brandl19564802006-05-10 17:13:20 +0000808 print >>self.stdout, '***', exc_type_name + ':', repr(v)
Tim Peters2344fae2001-01-15 00:50:52 +0000809 return
810 code = None
811 # Is it a function?
812 try: code = value.func_code
813 except: pass
814 if code:
Georg Brandl19564802006-05-10 17:13:20 +0000815 print >>self.stdout, 'Function', code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000816 return
817 # Is it an instance method?
818 try: code = value.im_func.func_code
819 except: pass
820 if code:
Georg Brandl19564802006-05-10 17:13:20 +0000821 print >>self.stdout, 'Method', code.co_name
Tim Peters2344fae2001-01-15 00:50:52 +0000822 return
823 # None of the above...
Georg Brandl19564802006-05-10 17:13:20 +0000824 print >>self.stdout, type(value)
Guido van Rossum8e2ec561993-07-29 09:37:38 +0000825
Tim Peters2344fae2001-01-15 00:50:52 +0000826 def do_alias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000827 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000828 if len(args) == 0:
829 keys = self.aliases.keys()
830 keys.sort()
831 for alias in keys:
Georg Brandl19564802006-05-10 17:13:20 +0000832 print >>self.stdout, "%s = %s" % (alias, self.aliases[alias])
Tim Peters2344fae2001-01-15 00:50:52 +0000833 return
Guido van Rossum08454592002-07-12 13:10:53 +0000834 if args[0] in self.aliases and len(args) == 1:
Georg Brandl19564802006-05-10 17:13:20 +0000835 print >>self.stdout, "%s = %s" % (args[0], self.aliases[args[0]])
Tim Peters2344fae2001-01-15 00:50:52 +0000836 else:
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000837 self.aliases[args[0]] = ' '.join(args[1:])
Guido van Rossum23efba41992-01-27 16:58:47 +0000838
Tim Peters2344fae2001-01-15 00:50:52 +0000839 def do_unalias(self, arg):
Eric S. Raymond9b93c5f2001-02-09 07:58:53 +0000840 args = arg.split()
Tim Peters2344fae2001-01-15 00:50:52 +0000841 if len(args) == 0: return
Raymond Hettinger54f02222002-06-01 14:18:47 +0000842 if args[0] in self.aliases:
Tim Peters2344fae2001-01-15 00:50:52 +0000843 del self.aliases[args[0]]
Guido van Rossum00230781993-03-29 11:39:45 +0000844
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000845 #list of all the commands making the program resume execution.
Georg Brandl19564802006-05-10 17:13:20 +0000846 commands_resuming = ['do_continue', 'do_step', 'do_next', 'do_return',
847 'do_quit', 'do_jump']
Martin v. Löwisbd30f522006-04-17 17:08:37 +0000848
Tim Peters2344fae2001-01-15 00:50:52 +0000849 # Print a traceback starting at the top stack frame.
850 # The most recently entered frame is printed last;
851 # this is different from dbx and gdb, but consistent with
852 # the Python interpreter's stack trace.
853 # It is also consistent with the up/down commands (which are
854 # compatible with dbx and gdb: up moves towards 'main()'
855 # and down moves towards the most recent stack frame).
Guido van Rossum2424f851998-09-11 22:50:09 +0000856
Tim Peters2344fae2001-01-15 00:50:52 +0000857 def print_stack_trace(self):
858 try:
859 for frame_lineno in self.stack:
860 self.print_stack_entry(frame_lineno)
861 except KeyboardInterrupt:
862 pass
Guido van Rossum2424f851998-09-11 22:50:09 +0000863
Tim Peters2344fae2001-01-15 00:50:52 +0000864 def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix):
865 frame, lineno = frame_lineno
866 if frame is self.curframe:
Georg Brandl19564802006-05-10 17:13:20 +0000867 print >>self.stdout, '>',
Tim Peters2344fae2001-01-15 00:50:52 +0000868 else:
Georg Brandl19564802006-05-10 17:13:20 +0000869 print >>self.stdout, ' ',
870 print >>self.stdout, self.format_stack_entry(frame_lineno,
871 prompt_prefix)
Guido van Rossum2424f851998-09-11 22:50:09 +0000872
Guido van Rossum921c8241992-01-10 14:54:42 +0000873
Tim Peters2344fae2001-01-15 00:50:52 +0000874 # Help methods (derived from pdb.doc)
Guido van Rossum921c8241992-01-10 14:54:42 +0000875
Tim Peters2344fae2001-01-15 00:50:52 +0000876 def help_help(self):
877 self.help_h()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000878
Tim Peters2344fae2001-01-15 00:50:52 +0000879 def help_h(self):
Georg Brandl19564802006-05-10 17:13:20 +0000880 print >>self.stdout, """h(elp)
Tim Peters2344fae2001-01-15 00:50:52 +0000881Without argument, print the list of available commands.
882With a command name as argument, print help about that command
883"help pdb" pipes the full documentation file to the $PAGER
884"help exec" gives help on the ! command"""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000885
Tim Peters2344fae2001-01-15 00:50:52 +0000886 def help_where(self):
887 self.help_w()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000888
Tim Peters2344fae2001-01-15 00:50:52 +0000889 def help_w(self):
Georg Brandl19564802006-05-10 17:13:20 +0000890 print >>self.stdout, """w(here)
Tim Peters2344fae2001-01-15 00:50:52 +0000891Print a stack trace, with the most recent frame at the bottom.
892An arrow indicates the "current frame", which determines the
Guido van Rossum6bd68352001-01-20 17:57:37 +0000893context of most commands. 'bt' is an alias for this command."""
894
895 help_bt = help_w
Guido van Rossumb6775db1994-08-01 11:34:53 +0000896
Tim Peters2344fae2001-01-15 00:50:52 +0000897 def help_down(self):
898 self.help_d()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000899
Tim Peters2344fae2001-01-15 00:50:52 +0000900 def help_d(self):
Georg Brandl19564802006-05-10 17:13:20 +0000901 print >>self.stdout, """d(own)
Tim Peters2344fae2001-01-15 00:50:52 +0000902Move the current frame one level down in the stack trace
Johannes Gijsbers34c41202004-08-14 15:19:28 +0000903(to a newer frame)."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000904
Tim Peters2344fae2001-01-15 00:50:52 +0000905 def help_up(self):
906 self.help_u()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000907
Tim Peters2344fae2001-01-15 00:50:52 +0000908 def help_u(self):
Georg Brandl19564802006-05-10 17:13:20 +0000909 print >>self.stdout, """u(p)
Tim Peters2344fae2001-01-15 00:50:52 +0000910Move the current frame one level up in the stack trace
Johannes Gijsbers34c41202004-08-14 15:19:28 +0000911(to an older frame)."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000912
Tim Peters2344fae2001-01-15 00:50:52 +0000913 def help_break(self):
914 self.help_b()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000915
Tim Peters2344fae2001-01-15 00:50:52 +0000916 def help_b(self):
Georg Brandl19564802006-05-10 17:13:20 +0000917 print >>self.stdout, """b(reak) ([file:]lineno | function) [, condition]
Tim Peters2344fae2001-01-15 00:50:52 +0000918With a line number argument, set a break there in the current
919file. With a function name, set a break at first executable line
920of that function. Without argument, list all breaks. If a second
921argument is present, it is a string specifying an expression
922which must evaluate to true before the breakpoint is honored.
Guido van Rossumb6775db1994-08-01 11:34:53 +0000923
Tim Peters2344fae2001-01-15 00:50:52 +0000924The line number may be prefixed with a filename and a colon,
925to specify a breakpoint in another file (probably one that
926hasn't been loaded yet). The file is searched for on sys.path;
927the .py suffix may be omitted."""
Guido van Rossumb5699c71998-07-20 23:13:54 +0000928
Tim Peters2344fae2001-01-15 00:50:52 +0000929 def help_clear(self):
930 self.help_cl()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000931
Tim Peters2344fae2001-01-15 00:50:52 +0000932 def help_cl(self):
Georg Brandl19564802006-05-10 17:13:20 +0000933 print >>self.stdout, "cl(ear) filename:lineno"
934 print >>self.stdout, """cl(ear) [bpnumber [bpnumber...]]
Tim Peters2344fae2001-01-15 00:50:52 +0000935With a space separated list of breakpoint numbers, clear
936those breakpoints. Without argument, clear all breaks (but
937first ask confirmation). With a filename:lineno argument,
938clear all breaks at that line in that file.
Guido van Rossumb6775db1994-08-01 11:34:53 +0000939
Tim Peters2344fae2001-01-15 00:50:52 +0000940Note that the argument is different from previous versions of
941the debugger (in python distributions 1.5.1 and before) where
942a linenumber was used instead of either filename:lineno or
943breakpoint numbers."""
Guido van Rossumb5699c71998-07-20 23:13:54 +0000944
Tim Peters2344fae2001-01-15 00:50:52 +0000945 def help_tbreak(self):
Georg Brandl19564802006-05-10 17:13:20 +0000946 print >>self.stdout, """tbreak same arguments as break, but breakpoint is
Tim Peters2344fae2001-01-15 00:50:52 +0000947removed when first hit."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000948
Tim Peters2344fae2001-01-15 00:50:52 +0000949 def help_enable(self):
Georg Brandl19564802006-05-10 17:13:20 +0000950 print >>self.stdout, """enable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +0000951Enables the breakpoints given as a space separated list of
952bp numbers."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000953
Tim Peters2344fae2001-01-15 00:50:52 +0000954 def help_disable(self):
Georg Brandl19564802006-05-10 17:13:20 +0000955 print >>self.stdout, """disable bpnumber [bpnumber ...]
Tim Peters2344fae2001-01-15 00:50:52 +0000956Disables the breakpoints given as a space separated list of
957bp numbers."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000958
Tim Peters2344fae2001-01-15 00:50:52 +0000959 def help_ignore(self):
Georg Brandl19564802006-05-10 17:13:20 +0000960 print >>self.stdout, """ignore bpnumber count
Tim Peters2344fae2001-01-15 00:50:52 +0000961Sets the ignore count for the given breakpoint number. A breakpoint
962becomes active when the ignore count is zero. When non-zero, the
963count is decremented each time the breakpoint is reached and the
964breakpoint is not disabled and any associated condition evaluates
965to true."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000966
Tim Peters2344fae2001-01-15 00:50:52 +0000967 def help_condition(self):
Georg Brandl19564802006-05-10 17:13:20 +0000968 print >>self.stdout, """condition bpnumber str_condition
Tim Peters2344fae2001-01-15 00:50:52 +0000969str_condition is a string specifying an expression which
970must evaluate to true before the breakpoint is honored.
971If str_condition is absent, any existing condition is removed;
972i.e., the breakpoint is made unconditional."""
Guido van Rossum2424f851998-09-11 22:50:09 +0000973
Tim Peters2344fae2001-01-15 00:50:52 +0000974 def help_step(self):
975 self.help_s()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000976
Tim Peters2344fae2001-01-15 00:50:52 +0000977 def help_s(self):
Georg Brandl19564802006-05-10 17:13:20 +0000978 print >>self.stdout, """s(tep)
Tim Peters2344fae2001-01-15 00:50:52 +0000979Execute the current line, stop at the first possible occasion
980(either in a function that is called or in the current function)."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000981
Benjamin Peterson98353942008-05-11 14:13:25 +0000982 def help_until(self):
983 self.help_unt()
984
985 def help_unt(self):
986 print """unt(il)
987Continue execution until the line with a number greater than the current
988one is reached or until the current frame returns"""
989
Tim Peters2344fae2001-01-15 00:50:52 +0000990 def help_next(self):
991 self.help_n()
Guido van Rossumb6775db1994-08-01 11:34:53 +0000992
Tim Peters2344fae2001-01-15 00:50:52 +0000993 def help_n(self):
Georg Brandl19564802006-05-10 17:13:20 +0000994 print >>self.stdout, """n(ext)
Tim Peters2344fae2001-01-15 00:50:52 +0000995Continue execution until the next line in the current function
996is reached or it returns."""
Guido van Rossumb6775db1994-08-01 11:34:53 +0000997
Tim Peters2344fae2001-01-15 00:50:52 +0000998 def help_return(self):
999 self.help_r()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001000
Tim Peters2344fae2001-01-15 00:50:52 +00001001 def help_r(self):
Georg Brandl19564802006-05-10 17:13:20 +00001002 print >>self.stdout, """r(eturn)
Tim Peters2344fae2001-01-15 00:50:52 +00001003Continue execution until the current function returns."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001004
Tim Peters2344fae2001-01-15 00:50:52 +00001005 def help_continue(self):
1006 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001007
Tim Peters2344fae2001-01-15 00:50:52 +00001008 def help_cont(self):
1009 self.help_c()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001010
Tim Peters2344fae2001-01-15 00:50:52 +00001011 def help_c(self):
Georg Brandl19564802006-05-10 17:13:20 +00001012 print >>self.stdout, """c(ont(inue))
Tim Peters2344fae2001-01-15 00:50:52 +00001013Continue execution, only stop when a breakpoint is encountered."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001014
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001015 def help_jump(self):
1016 self.help_j()
1017
1018 def help_j(self):
Georg Brandl19564802006-05-10 17:13:20 +00001019 print >>self.stdout, """j(ump) lineno
Michael W. Hudsoncfd38842002-12-17 16:15:34 +00001020Set the next line that will be executed."""
1021
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001022 def help_debug(self):
Georg Brandl19564802006-05-10 17:13:20 +00001023 print >>self.stdout, """debug code
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00001024Enter a recursive debugger that steps through the code argument
1025(which is an arbitrary expression or statement to be executed
1026in the current environment)."""
1027
Tim Peters2344fae2001-01-15 00:50:52 +00001028 def help_list(self):
1029 self.help_l()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001030
Tim Peters2344fae2001-01-15 00:50:52 +00001031 def help_l(self):
Georg Brandl19564802006-05-10 17:13:20 +00001032 print >>self.stdout, """l(ist) [first [,last]]
Tim Peters2344fae2001-01-15 00:50:52 +00001033List source code for the current file.
1034Without arguments, list 11 lines around the current line
1035or continue the previous listing.
1036With one argument, list 11 lines starting at that line.
1037With two arguments, list the given range;
1038if the second argument is less than the first, it is a count."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001039
Tim Peters2344fae2001-01-15 00:50:52 +00001040 def help_args(self):
1041 self.help_a()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001042
Tim Peters2344fae2001-01-15 00:50:52 +00001043 def help_a(self):
Georg Brandl19564802006-05-10 17:13:20 +00001044 print >>self.stdout, """a(rgs)
Tim Peters2344fae2001-01-15 00:50:52 +00001045Print the arguments of the current function."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001046
Tim Peters2344fae2001-01-15 00:50:52 +00001047 def help_p(self):
Georg Brandl19564802006-05-10 17:13:20 +00001048 print >>self.stdout, """p expression
Tim Peters2344fae2001-01-15 00:50:52 +00001049Print the value of the expression."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001050
Barry Warsaw210bd202002-11-05 22:40:20 +00001051 def help_pp(self):
Georg Brandl19564802006-05-10 17:13:20 +00001052 print >>self.stdout, """pp expression
Barry Warsaw210bd202002-11-05 22:40:20 +00001053Pretty-print the value of the expression."""
1054
Tim Peters2344fae2001-01-15 00:50:52 +00001055 def help_exec(self):
Georg Brandl19564802006-05-10 17:13:20 +00001056 print >>self.stdout, """(!) statement
Tim Peters2344fae2001-01-15 00:50:52 +00001057Execute the (one-line) statement in the context of
1058the current stack frame.
1059The exclamation point can be omitted unless the first word
1060of the statement resembles a debugger command.
1061To assign to a global variable you must always prefix the
1062command with a 'global' command, e.g.:
1063(Pdb) global list_options; list_options = ['-l']
1064(Pdb)"""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001065
Georg Brandl8e84c652007-03-13 21:08:15 +00001066 def help_run(self):
1067 print """run [args...]
1068Restart the debugged python program. If a string is supplied, it is
1069splitted with "shlex" and the result is used as the new sys.argv.
1070History, breakpoints, actions and debugger options are preserved.
1071"restart" is an alias for "run"."""
1072
1073 help_restart = help_run
1074
Tim Peters2344fae2001-01-15 00:50:52 +00001075 def help_quit(self):
1076 self.help_q()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001077
Tim Peters2344fae2001-01-15 00:50:52 +00001078 def help_q(self):
Georg Brandl19564802006-05-10 17:13:20 +00001079 print >>self.stdout, """q(uit) or exit - Quit from the debugger.
Tim Peters2344fae2001-01-15 00:50:52 +00001080The program being executed is aborted."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001081
Guido van Rossumd1c08f32002-04-15 00:48:24 +00001082 help_exit = help_q
1083
Tim Peters2344fae2001-01-15 00:50:52 +00001084 def help_whatis(self):
Georg Brandl19564802006-05-10 17:13:20 +00001085 print >>self.stdout, """whatis arg
Tim Peters2344fae2001-01-15 00:50:52 +00001086Prints the type of the argument."""
Guido van Rossumb6775db1994-08-01 11:34:53 +00001087
Tim Peters2344fae2001-01-15 00:50:52 +00001088 def help_EOF(self):
Georg Brandl19564802006-05-10 17:13:20 +00001089 print >>self.stdout, """EOF
Tim Peters2344fae2001-01-15 00:50:52 +00001090Handles the receipt of EOF as a command."""
Guido van Rossum2424f851998-09-11 22:50:09 +00001091
Tim Peters2344fae2001-01-15 00:50:52 +00001092 def help_alias(self):
Georg Brandl19564802006-05-10 17:13:20 +00001093 print >>self.stdout, """alias [name [command [parameter parameter ...] ]]
Tim Peters2344fae2001-01-15 00:50:52 +00001094Creates an alias called 'name' the executes 'command'. The command
1095must *not* be enclosed in quotes. Replaceable parameters are
1096indicated by %1, %2, and so on, while %* is replaced by all the
1097parameters. If no command is given, the current alias for name
1098is shown. If no name is given, all aliases are listed.
Guido van Rossum2424f851998-09-11 22:50:09 +00001099
Tim Peters2344fae2001-01-15 00:50:52 +00001100Aliases may be nested and can contain anything that can be
1101legally typed at the pdb prompt. Note! You *can* override
1102internal pdb commands with aliases! Those internal commands
1103are then hidden until the alias is removed. Aliasing is recursively
1104applied to the first word of the command line; all other words
1105in the line are left alone.
Guido van Rossum2424f851998-09-11 22:50:09 +00001106
Tim Peters2344fae2001-01-15 00:50:52 +00001107Some useful aliases (especially when placed in the .pdbrc file) are:
Guido van Rossum2424f851998-09-11 22:50:09 +00001108
Tim Peters2344fae2001-01-15 00:50:52 +00001109#Print instance variables (usage "pi classInst")
1110alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
Guido van Rossum2424f851998-09-11 22:50:09 +00001111
Tim Peters2344fae2001-01-15 00:50:52 +00001112#Print instance variables in self
1113alias ps pi self
1114"""
Guido van Rossum2424f851998-09-11 22:50:09 +00001115
Tim Peters2344fae2001-01-15 00:50:52 +00001116 def help_unalias(self):
Georg Brandl19564802006-05-10 17:13:20 +00001117 print >>self.stdout, """unalias name
Tim Peters2344fae2001-01-15 00:50:52 +00001118Deletes the specified alias."""
Guido van Rossum2424f851998-09-11 22:50:09 +00001119
Martin v. Löwisbd30f522006-04-17 17:08:37 +00001120 def help_commands(self):
Georg Brandl19564802006-05-10 17:13:20 +00001121 print >>self.stdout, """commands [bpnumber]
Martin v. Löwisbd30f522006-04-17 17:08:37 +00001122(com) ...
1123(com) end
1124(Pdb)
1125
1126Specify a list of commands for breakpoint number bpnumber. The
1127commands themselves appear on the following lines. Type a line
1128containing just 'end' to terminate the commands.
1129
1130To remove all commands from a breakpoint, type commands and
1131follow it immediately with end; that is, give no commands.
1132
1133With no bpnumber argument, commands refers to the last
1134breakpoint set.
1135
1136You can use breakpoint commands to start your program up again.
1137Simply use the continue command, or step, or any other
1138command that resumes execution.
1139
1140Specifying any command resuming execution (currently continue,
1141step, next, return, jump, quit and their abbreviations) terminates
1142the command list (as if that command was immediately followed by end).
1143This is because any time you resume execution
Martin v. Löwisf62eee12006-04-17 17:37:09 +00001144(even with a simple next or step), you may encounter
Martin v. Löwisbd30f522006-04-17 17:08:37 +00001145another breakpoint--which could have its own command list, leading to
1146ambiguities about which list to execute.
1147
1148 If you use the 'silent' command in the command list, the
1149usual message about stopping at a breakpoint is not printed. This may
1150be desirable for breakpoints that are to print a specific message and
1151then continue. If none of the other commands print anything, you
1152see no sign that the breakpoint was reached.
1153"""
1154
Tim Peters2344fae2001-01-15 00:50:52 +00001155 def help_pdb(self):
1156 help()
Guido van Rossumb6775db1994-08-01 11:34:53 +00001157
Tim Peters2344fae2001-01-15 00:50:52 +00001158 def lookupmodule(self, filename):
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001159 """Helper function for break/clear parsing -- may be overridden.
1160
1161 lookupmodule() translates (possibly incomplete) file or module name
1162 into an absolute file name.
1163 """
1164 if os.path.isabs(filename) and os.path.exists(filename):
Tim Peterse718f612004-10-12 21:51:32 +00001165 return filename
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001166 f = os.path.join(sys.path[0], filename)
1167 if os.path.exists(f) and self.canonic(f) == self.mainpyfile:
1168 return f
Tim Peters2344fae2001-01-15 00:50:52 +00001169 root, ext = os.path.splitext(filename)
1170 if ext == '':
1171 filename = filename + '.py'
1172 if os.path.isabs(filename):
1173 return filename
1174 for dirname in sys.path:
1175 while os.path.islink(dirname):
1176 dirname = os.readlink(dirname)
1177 fullname = os.path.join(dirname, filename)
1178 if os.path.exists(fullname):
1179 return fullname
1180 return None
Guido van Rossumb5699c71998-07-20 23:13:54 +00001181
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001182 def _runscript(self, filename):
Georg Brandlb6ae6aa2007-03-13 21:58:44 +00001183 # The script has to run in __main__ namespace (or imports from
1184 # __main__ will break).
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001185 #
Georg Brandlb6ae6aa2007-03-13 21:58:44 +00001186 # So we clear up the __main__ and set several special variables
1187 # (this gets rid of pdb's globals and cleans old variables on restarts).
1188 import __main__
1189 __main__.__dict__.clear()
1190 __main__.__dict__.update({"__name__" : "__main__",
1191 "__file__" : filename,
1192 "__builtins__": __builtins__,
1193 })
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001194
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001195 # When bdb sets tracing, a number of call and line events happens
1196 # BEFORE debugger even reaches user's code (and the exact sequence of
1197 # events depends on python version). So we take special measures to
1198 # avoid stopping before we reach the main script (see user_line and
1199 # user_call for details).
1200 self._wait_for_mainpyfile = 1
1201 self.mainpyfile = self.canonic(filename)
1202 self._user_requested_quit = 0
1203 statement = 'execfile( "%s")' % filename
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001204 self.run(statement)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001205
Guido van Rossum35771131992-09-08 11:59:04 +00001206# Simplified interface
1207
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001208def run(statement, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001209 Pdb().run(statement, globals, locals)
Guido van Rossum5e38b6f1995-02-27 13:13:40 +00001210
1211def runeval(expression, globals=None, locals=None):
Tim Peters2344fae2001-01-15 00:50:52 +00001212 return Pdb().runeval(expression, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001213
1214def runctx(statement, globals, locals):
Tim Peters2344fae2001-01-15 00:50:52 +00001215 # B/W compatibility
1216 run(statement, globals, locals)
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001217
Raymond Hettinger2ef7e6c2004-10-24 00:32:24 +00001218def runcall(*args, **kwds):
1219 return Pdb().runcall(*args, **kwds)
Guido van Rossum4e160981992-09-02 20:43:20 +00001220
Guido van Rossumb6775db1994-08-01 11:34:53 +00001221def set_trace():
Johannes Gijsbers84a6c202004-11-07 11:35:30 +00001222 Pdb().set_trace(sys._getframe().f_back)
Guido van Rossum35771131992-09-08 11:59:04 +00001223
1224# Post-Mortem interface
1225
Facundo Batistac54aec12008-03-08 16:50:27 +00001226def post_mortem(t=None):
1227 # handling the default
1228 if t is None:
1229 # sys.exc_info() returns (type, value, traceback) if an exception is
1230 # being handled, otherwise it returns None
1231 t = sys.exc_info()[2]
1232 if t is None:
1233 raise ValueError("A valid traceback must be passed if no "
1234 "exception is being handled")
1235
Tim Peters2344fae2001-01-15 00:50:52 +00001236 p = Pdb()
1237 p.reset()
Benjamin Petersonaf956f12008-10-22 21:19:41 +00001238 p.interaction(None, t)
Guido van Rossum35771131992-09-08 11:59:04 +00001239
1240def pm():
Tim Peters2344fae2001-01-15 00:50:52 +00001241 post_mortem(sys.last_traceback)
Guido van Rossum35771131992-09-08 11:59:04 +00001242
1243
1244# Main program for testing
1245
Guido van Rossum23efba41992-01-27 16:58:47 +00001246TESTCMD = 'import x; x.main()'
Guido van Rossum6fe08b01992-01-16 13:50:21 +00001247
Guido van Rossum921c8241992-01-10 14:54:42 +00001248def test():
Tim Peters2344fae2001-01-15 00:50:52 +00001249 run(TESTCMD)
Guido van Rossume61fa0a1993-10-22 13:56:35 +00001250
1251# print help
1252def help():
Tim Peters2344fae2001-01-15 00:50:52 +00001253 for dirname in sys.path:
1254 fullname = os.path.join(dirname, 'pdb.doc')
1255 if os.path.exists(fullname):
1256 sts = os.system('${PAGER-more} '+fullname)
1257 if sts: print '*** Pager exit status:', sts
1258 break
1259 else:
1260 print 'Sorry, can\'t find the help file "pdb.doc"',
1261 print 'along the Python search path'
Guido van Rossumf17361d1996-07-30 16:28:13 +00001262
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001263def main():
Benjamin Peterson13be2cf2008-03-26 11:57:47 +00001264 if not sys.argv[1:] or sys.argv[1] in ("--help", "-h"):
Tim Peters2344fae2001-01-15 00:50:52 +00001265 print "usage: pdb.py scriptfile [arg] ..."
1266 sys.exit(2)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001267
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001268 mainpyfile = sys.argv[1] # Get script filename
1269 if not os.path.exists(mainpyfile):
1270 print 'Error:', mainpyfile, 'does not exist'
Tim Peters2344fae2001-01-15 00:50:52 +00001271 sys.exit(1)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001272
Tim Peters2344fae2001-01-15 00:50:52 +00001273 del sys.argv[0] # Hide "pdb.py" from argument list
Guido van Rossumec577d51996-09-10 17:39:34 +00001274
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001275 # Replace pdb's dir with script's dir in front of module search path.
1276 sys.path[0] = os.path.dirname(mainpyfile)
Guido van Rossumf17361d1996-07-30 16:28:13 +00001277
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001278 # Note on saving/restoring sys.argv: it's a good idea when sys.argv was
1279 # modified by the script being debugged. It's a bad idea when it was
Georg Brandl8e84c652007-03-13 21:08:15 +00001280 # changed by the user from the command line. There is a "restart" command which
1281 # allows explicit specification of command line arguments.
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001282 pdb = Pdb()
1283 while 1:
1284 try:
1285 pdb._runscript(mainpyfile)
1286 if pdb._user_requested_quit:
1287 break
Tim Peterse718f612004-10-12 21:51:32 +00001288 print "The program finished and will be restarted"
Georg Brandl8e84c652007-03-13 21:08:15 +00001289 except Restart:
1290 print "Restarting", mainpyfile, "with arguments:"
1291 print "\t" + " ".join(sys.argv[1:])
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001292 except SystemExit:
1293 # In most cases SystemExit does not warrant a post-mortem session.
1294 print "The program exited via sys.exit(). Exit status: ",
1295 print sys.exc_info()[1]
1296 except:
1297 traceback.print_exc()
1298 print "Uncaught exception. Entering post mortem debugging"
1299 print "Running 'cont' or 'step' will restart the program"
1300 t = sys.exc_info()[2]
Benjamin Petersonaf956f12008-10-22 21:19:41 +00001301 pdb.interaction(None, t)
Johannes Gijsbers25b38c82004-10-12 18:12:09 +00001302 print "Post mortem debugger finished. The "+mainpyfile+" will be restarted"
1303
1304
1305# When invoked as main program, invoke the debugger on a script
Georg Brandlb6ae6aa2007-03-13 21:58:44 +00001306if __name__ == '__main__':
1307 import pdb
1308 pdb.main()