| The Python Debugger | 
 | =================== | 
 |  | 
 | To use the debugger in its simplest form: | 
 |  | 
 | 	>>> import pdb | 
 | 	>>> pdb.run('<a statement>') | 
 |  | 
 | The debugger's prompt is '(Pdb) '.  This will stop in the first | 
 | function call in <a statement>. | 
 |  | 
 | Alternatively, if a statement terminated with an unhandled exception, | 
 | you can use pdb's post-mortem facility to inspect the contents of the | 
 | traceback: | 
 |  | 
 | 	>>> <a statement> | 
 | 	<exception traceback> | 
 | 	>>> import pdb | 
 | 	>>> pdb.pm() | 
 |  | 
 | The commands recognized by the debugger are listed in the next | 
 | section.  Most can be abbreviated as indicated; e.g., h(elp) means | 
 | that 'help' can be typed as 'h' or 'help' (but not as 'he' or 'hel', | 
 | nor as 'H' or 'Help' or 'HELP').  Optional arguments are enclosed in | 
 | square brackets. | 
 |  | 
 | A blank line repeats the previous command literally.  (Except for | 
 | 'list', where it lists the next 11 lines.) | 
 |  | 
 | Commands that the debugger doesn't recognize are assumed to be Python | 
 | statements and are executed in the context of the program being | 
 | debugged.  Python statements can also be prefixed with an exclamation | 
 | point ('!').  This is a powerful way to inspect the program being | 
 | debugged; it is even possible to change variables.  When an exception | 
 | occurs in such a statement, the exception name is printed but the | 
 | debugger's state is not changed. | 
 |  | 
 | The debugger is not directly programmable; but it is implemented as a | 
 | class from which you can derive your own debugger class, so you can | 
 | make as fancy as you like. | 
 |  | 
 |  | 
 | Debugger commands | 
 | ================= | 
 |  | 
 | h(elp) | 
 | 	Without argument, print the list of available commands. | 
 | 	With a command name as argument, print help about that command | 
 | 	(this is currently not implemented). | 
 |  | 
 | w(here) | 
 | 	Print a stack trace, with the most recent frame at the bottom. | 
 | 	An arrow indicates the "current frame", which determines the | 
 | 	context of most commands. | 
 |  | 
 | d(own) | 
 | 	Move the current frame one level down in the stack trace | 
 | 	(to an older frame). | 
 |  | 
 | u(p) | 
 | 	Move the current frame one level up in the stack trace | 
 | 	(to a newer frame). | 
 |  | 
 | b(reak) [lineno | function] | 
 | 	With a line number argument, set a break there in the current | 
 | 	file.  With a function name, set a break at the entry of that | 
 | 	function.  Without argument, list all breaks. | 
 |  | 
 | cl(ear) [lineno] | 
 | 	With a line number argument, clear that break in the current file. | 
 | 	Without argument, clear all breaks (but first ask confirmation). | 
 |  | 
 | s(tep) | 
 | 	Execute the current line, stop at the first possible occasion | 
 | 	(either in a function that is called or in the current function). | 
 |  | 
 | n(ext) | 
 | 	Continue execution until the next line in the current function | 
 | 	is reached or it returns. | 
 |  | 
 | r(eturn) | 
 | 	Continue execution until the current function returns. | 
 |  | 
 | c(ont(inue)) | 
 | 	Continue execution, only stop when a breakpoint is encountered. | 
 |  | 
 | l(ist) [first [,last]] | 
 | 	List source code for the current file. | 
 | 	Without arguments, list 11 lines around the current line | 
 | 	or continue the previous listing. | 
 | 	With one argument, list 11 lines starting at that line. | 
 | 	With two arguments, list the given range; | 
 | 	if the second argument is less than the first, it is a count. | 
 |  | 
 | a(rgs) | 
 | 	Print the argument list of the current function. | 
 |  | 
 | p expression | 
 | 	Print the value of the expression. | 
 |  | 
 | (!) statement | 
 | 	Execute the (one-line) statement in the context of | 
 | 	the current stack frame. | 
 | 	The exclamation point can be omitted unless the first word | 
 | 	of the statement resembles a debugger command. | 
 | 	To assign to a global variable you must always prefix the | 
 | 	command with a 'global' command, e.g.: | 
 | 	(Pdb) global list_options; list_options = ['-l'] | 
 | 	(Pdb) | 
 |  | 
 | q(uit) | 
 | 	Quit from the debugger. | 
 | 	The program being executed is aborted. | 
 |  | 
 |  | 
 | How it works | 
 | ============ | 
 |  | 
 | Some changes were made to the interpreter: | 
 | - sys.settrace(func) sets the global trace function | 
 | - there can also a local trace function (see later) | 
 |  | 
 | Trace functions have three arguments: (frame, event, arg) | 
 |   - frame is the current stack frame | 
 |   - event is a string: 'call', 'line', 'return' or 'exception' | 
 |   - arg is dependent on the event type | 
 | A trace function should return a new trace function or None. | 
 | Class methods are accepted (and most useful!) as trace methods. | 
 |  | 
 | The events have the following meaning: | 
 |  | 
 |   'call':      A function is called (or some other code block entered). | 
 |                The global trace function is called; | 
 |                arg is the argument list to the function; | 
 |                the return value specifies the local trace function. | 
 |  | 
 |   'line':      The interpreter is about to execute a new line of code | 
 |                (sometimes multiple line events on one line exist). | 
 |                The local trace function is called; arg in None; | 
 |                the return value specifies the new local trace function. | 
 |  | 
 |   'return':    A function (or other code block) is about to return. | 
 |                The local trace function is called; | 
 |                arg is the value that will be returned. | 
 |                The trace function's return value is ignored. | 
 |  | 
 |   'exception': An exception has occurred. | 
 |                The local trace function is called; | 
 |                arg is a triple (exception, value, traceback); | 
 |                the return value specifies the new local trace function | 
 |  | 
 | Note that as an exception is propagated down the chain of callers, an | 
 | 'exception' event is generated at each level. | 
 |  | 
 | Stack frame objects have the following read-only attributes: | 
 |   f_code:      the code object being executed | 
 |   f_lineno:    the current line number (-1 for 'call' events) | 
 |   f_back:      the stack frame of the caller, or None | 
 |   f_locals:    dictionary containing local name bindings | 
 |   f_globals:   dictionary containing global name bindings | 
 |  | 
 | Code objects have the following read-only attributes: | 
 |   co_code:     the code string | 
 |   co_names:    the list of names used by the code | 
 |   co_consts:   the list of (literal) constants used by the code | 
 |   co_filename: the filename from which the code was compiled |