Python Debugging With TotalView
Rogue Wave has added Python debugging capabilities in the TotalView debugger. More information about this can be found at www.roguewave.com/products-services/features/mixed-language-debugging.
Python Script Debugging Using pdb
to use pdb as a stand-alone debugger, type:
python3 -m pdb myscript.py
Consult the Python 2.X Debugger Commands or Python 3.X Debugger Commands documentation.
Example Debugging Session
import os, sys import string def plusAndSquare(a, b): res = 0 res = (a + b) res = res * res print '('+`a`+'+'+`b`+')^2 = ' + `res` def main(): print "Enter the first number:" first = sys.stdin.readline() print "Enter the second number:" second = sys.stdin.readline() plusAndSquare(string.atoi(first), string.atoi(second)) main()
example.py
This script asks for two numbers from the user then adds them and squares the result.
%python -m pdb example.py > /g/g2/dahn/DEBUG/PY/<string>(0)?() (Pdb) b main <- Set a breakpoint at main function Breakpoint 1 at /g/g2/dahn/DEBUG/PY/example.py:17 (Pdb) c <- continue > /g/g2/dahn/DEBUG/PY/<string>(1)?() (Pdb) c <- continue until we hit a breakpoint > /g/g2/dahn/DEBUG/PY/example.py(17)main() -> print "Enter the first number:" (Pdb) l <- list the source code showing where we are 12 print '('+`a`+'+'+`b`+')^2 = ' + `res` 13 14 15 def main(): 16 17 B-> print "Enter the first number:" 18 first = sys.stdin.readline() 19 print "Enter the second number:" 20 second = sys.stdin.readline() 21 plusAndSquare(string.atoi(first), string.atoi(second)) 22 (Pdb) b plusAndSquare <- Set a breakpoint at another function Breakpoint 2 at /g/g2/dahn/DEBUG/PY/example.py:7 (Pdb) c <- continue until we hit a breakpoint Enter the first number: 4 Enter the second number: 7 > /g/g2/dahn/DEBUG/PY/example.py(7)plusAndSquare() -> res = 0 (Pdb) l <- list the source code showing where we are 2 import os, sys 3 import string 4 5 def plusAndSquare(a, b): 6 7 B-> res = 0 8 9 res = (a + b) 10 res = res * res 11 12 print '('+`a`+'+'+`b`+')^2 = ' + `res` (Pdb) n <- next > /g/g2/dahn/DEBUG/PY/example.py(9)plusAndSquare() -> res = (a + b) (Pdb) n <- next > /g/g2/dahn/DEBUG/PY/example.py(10)plusAndSquare() -> res = res * res (Pdb) n <- next > /g/g2/dahn/DEBUG/PY/example.py(12)plusAndSquare() -> print '('+`a`+'+'+`b`+')^2 = ' + `res` (Pdb) l <- list the source code showing where we are 7 B res = 0 8 9 res = (a + b) 10 res = res * res 11 12 -> print '('+`a`+'+'+`b`+')^2 = ' + `res` 13 14 15 def main(): 16 17 B print "Enter the first number:" (Pdb) p res <- print what value a variable, res, has 121 (Pdb) w <- print the stack trace of the current frame /g/g2/dahn/DEBUG/PY/<string>(1)?() /g/g2/dahn/DEBUG/PY/example.py(23)?() -> main() /g/g2/dahn/DEBUG/PY/example.py(21)main() -> plusAndSquare(string.atoi(first), string.atoi(second)) > /g/g2/dahn/DEBUG/PY/example.py(12)plusAndSquare() -> print '('+`a`+'+'+`b`+')^2 = ' + `res` (Pdb) a <- print the argument list of the current frame a = 4 b = 7 (Pdb) n <- next (4+7)^2 = 121 --Return-- > /g/g2/dahn/DEBUG/PY/example.py(12)plusAndSquare()->None -> print '('+`a`+'+'+`b`+')^2 = ' + `res` (Pdb) n <- next --Return-- > /g/g2/dahn/DEBUG/PY/example.py(21)main()->None -> plusAndSquare(string.atoi(first), string.atoi(second)) (Pdb) n <- next --Return-- > /g/g2/dahn/DEBUG/PY/example.py(23)?()->None -> main() (Pdb) n <- next --Return-- > /g/g2/dahn/DEBUG/PY/<string>(1)?()->None (Pdb) n <- next