DEV Community

Aditya Pratap Bhuyan
Aditya Pratap Bhuyan

Posted on

Debugging Python with pdb: A Comprehensive Guide

Image description

Introduction: Debugging is an essential skill for any programmer. Python provides a built-in debugger called pdb that allows you to interactively debug your code. This guide will help you understand how to use pdb effectively to find and fix errors in your programs.

Objective: By the end of this guide, you will be able to set breakpoints, inspect variables, and step through Python code using pdb.

What is pdb? Python Debugger, commonly known as pdb, is an interactive source code debugger for Python programs. It offers features like setting breakpoints, stepping through code, and inspecting program execution at different stages.

Why Use pdb?

  • Easily trace errors and bugs in your code.
  • Inspect values of variables at any point in code execution.
  • Control and visualize the flow of program logic.
  • No need for external tools; it's built into Python.

Sample Python Code with pdb:

def add(a, b):
return a + b

def subtract(a, b):
return a - b

def main():
import pdb; pdb.set_trace() # Set a breakpoint
x = 5
y = 10
result_add = add(x, y)
result_subtract = subtract(x, y)
print(f"The addition result is: {result_add}")
print(f"The subtraction result is: {result_subtract}")

if __name__ == "__main__":
main()

Explanation:

  1. Setting Breakpoints: The line import pdb; pdb.set_trace() sets a breakpoint in your code. When the program execution reaches this line, it pauses, allowing you to interact with the current program state.
  2. Inspecting Variables: Once paused, check variable values by typing their names in the pdb prompt. For example, type x or y to see their values.
  3. Control Commands: You can use various commands to control program execution:
    • n (next): Step over to the next line of code.
    • c (continue): Continue execution until the next breakpoint.
    • s (step): Step into functions to explore them.
    • l (list): List source code around the current line.
    • b (break): Set a breakpoint at a specified line.
    • q (quit): Quit the debugger and stop program execution.

Advanced Features:

  • Conditional Breakpoints: Set breakpoints that pause execution only when certain conditions are met. Use b [lineno], condition.
  • Post-Mortem Debugging: Use pdb.pm() to debug a program after it crashes, inspecting variables and the state at the time of the error.
  • Exploring Call Stacks: Use commands like where to see the call stack and locate where errors occur.

How to Run the Program: To run the program and start debugging, open your terminal and navigate to the directory containing the Python file. Run the following command:

python .py

When the program hits the breakpoint, it enters pdb interactive mode. Use the commands mentioned above to navigate through your code and inspect variables.

Best Practices:

  • Place breakpoints strategically to minimize disruption.
  • Use conditional breakpoints to limit when the debugger stops.
  • Keep track of variable values that impact your code's logic.

Final Thoughts: Mastering pdb can significantly improve your debugging efficiency. It equips you with the ability to diagnose and fix issues swiftly, enhancing your overall productivity as a developer.


Top comments (0)