$30 off During Our Annual Pro Sale. View Details »

Goodbye Print, Hello Debugger!

Goodbye Print, Hello Debugger!

Still debugging your code with print statements? Learn how to level up your ability to troubleshoot complex code situations by using the power of a fully-featured debugger in this talk aimed at all levels of programming ability.

Debuggers allow you to examine your program state, watch as the values of important variables change, and even modify the content of variables on the fly. Once I gave up print statements, my productivity as a programmer increased, and yours can too!

I’ll showcase the variety of debugger tools available - from pdb, the simplest command line debugger that’s part of the standard library, to fancy graphical debuggers available in Python IDEs. Join me as we walk through real code together using debugger tools in a hands-on way to help us diagnose problems and bugs. The skills you’ll learn in this talk will allow you to quickly use these tools in your own code bases for fun, school, or work.

Nina Zakharenko

August 03, 2019
Tweet

More Decks by Nina Zakharenko

Other Decks in Technology

Transcript

  1. nina.to/au19
    ---
    NINA ZAKHARENKO
    ---
    GOODBYE PRINT,
    HELLO DEBUGGER
    ---
    @NNJA

    View Slide

  2. whoami?
    @nnja
    nnja

    nina.to
    nina.to/au19

    View Slide

  3. LIVETWEET
    #PYCONAU
    @NNJA
    nina.to/au19

    View Slide

  4. WHAT YOU'LL LEARN TODAY
    ‣ why use debuggers?
    ‣ breakpoints, other debugger fundamentals
    ‣ my workflow
    ‣ tools: pdb, ipdb, IDEs
    ‣ breakpoint() in Python 3.7
    ‣ demos, tips & tricks, when to use what
    @nnja • nina.to/au19

    View Slide

  5. (THIS IS MY WAY)
    NOT ONE "RIGHT" WAY
    @nnja • nina.to/au19

    View Slide

  6. WHY USE
    DEBUGGERS?
    @nnja • nina.to/au19

    View Slide

  7. DEMO APPLICATION
    @nnja • nina.to/au19

    View Slide

  8. CALL API & GET JSON
    def repos_with_most_stars(languages, min_stars, sort, order):
    query = create_query(languages, min_stars)
    parameters = {"q": query, "sort": sort, "order": order}
    response = session.get(github_api_url, params=parameters)
    if response.status_code != 200:
    raise GitHubApiException(response.status_code)
    response_json = response.json()
    items = response_json["items"]

    View Slide

  9. PRINT
    @nnja • nina.to/au19

    View Slide

  10. A DEBUGGER HELPS YOU
    EXAMINE THE STATE
    OF A RUNNING PROGRAM
    @nnja • nina.to/au19

    View Slide

  11. DEBUGGING
    @nnja • nina.to/au19

    View Slide

  12. FIXING BUGS IN CODE IS A PROCESS OF CONFIRMING,
    ONE BY ONE,
    THAT THE THINGS YOU BELIEVE TO BE TRUE
    ABOUT THE CODE ARE ACTUALLY TRUE.
    WHEN YOU FIND AN ASSUMPTION THAT ISN'T,
    YOU FOUND A CLUE.
    (Paraphrased from the art of debugging with GBS, DDD, and Eclipse)
    @nnja • nina.to/au19

    View Slide

  13. TYPES OF
    DEBUGGERS
    @nnja • nina.to/au19

    View Slide

  14. CLI
    ‣ pdb (in standard library)
    ‣ ‣ ipdb- ipdb (via pip install
    ipdb)
    ‣ & more...
    @nnja • nina.to/au19

    View Slide

  15. @nnja

    View Slide

  16. GRAPHICAL DEBUGGERS
    ‣ pudb (graphical CLI)
    ‣ IDEs
    ‣‣ Visual Studio Code
    ‣PyCharm
    ‣ & others ...
    @nnja • nina.to/au19

    View Slide

  17. View Slide

  18. BREAKPOINTS
    @nnja • nina.to/au19

    View Slide

  19. USE breakpoint()
    IN PYTHON 3.7
    @nnja • nina.to/au19

    View Slide

  20. breakpoint() ADVANTAGES
    ‣ set your debugger of choice
    (I like ipdb)
    ‣set: PYTHONBREAKPOINT=ipdb.set_trace
    @nnja • nina.to/au19

    View Slide

  21. breakpoint() ADVANTAGES
    environment variable that
    allows you skip all debug
    breakpoints
    $ PYTHONBREAKPOINT=0 python3.7 prod_code.py
    @nnja • nina.to/au19

    View Slide

  22. NOT PYTHON 3.7?
    OTHER WAYS TO SET BREAKPOINTS (CLI)
    ‣ #1 Add them directly to your code
    import pdb; pdb.set_trace()
    # or
    import ipdb; ipdb.set_trace()
    ‣ #2: Set them interactively
    $ python -m pdb hello.py
    (Pdb) break 7
    Breakpoint 1 at hello.py:7
    @nnja • nina.to/au19

    View Slide

  23. DEBUGGER
    FUNDAMENTALS
    @nnja • nina.to/au19

    View Slide

  24. 5 MOST IMPORTANT COMMANDS
    ‣ l(ist) or ll for long list
    ‣ n(ext) - next line
    ‣ s(tep) - into
    ‣ c(ontinue) - until next breakpoint
    ‣ h(elp)
    @nnja • nina.to/au19

    View Slide

  25. View Slide

  26. DEBUGGERS
    IN CLIS
    IN ACTION
    @nnja • nina.to/au19

    View Slide

  27. DEBUGGERS
    IN IDES
    @nnja • nina.to/au19

    View Slide

  28. PYTHON EXTENSION FOR VS CODE
    ‣ 1. Download VS Code
    ‣ 2. Install Python Extension
    ‣ 3. Create a Debugger Configuration

    View Slide

  29. VISUAL BREAKPOINTS
    @nnja • nina.to/au19

    View Slide

  30. DEMO
    @nnja • nina.to/au19

    View Slide

  31. WHEN TO
    USE WHAT?
    @nnja • nina.to/au19

    View Slide

  32. WHEN TO USE WHAT?
    CLI DEBUGGING
    ‣ small programs and scripts
    ‣ want to work from command line
    IDE DEBUGGING
    ‣ complex code or large codebase
    ‣ debug templates
    @nnja • nina.to/au19

    View Slide

  33. TIPS & TRICKS
    @nnja • nina.to/au19

    View Slide

  34. TRICK: IPYTHON INTERACTIVE MODE ALIAS IN .PDBRC
    import IPython
    from traitlets.config import get_config
    cfg = get_config()
    # enable syntax highlighting
    cfg.InteractiveShellEmbed.colors = "Linux"
    cfg.InteractiveShellEmbed.confirm_exit = False
    alias interacti IPython.embed(config=cfg)
    download here: nina.to/pdbrc

    View Slide

  35. BONUS:
    DEBUGGING
    JUPYTER NOTEBOOKS
    IN VS CODE
    !
    : aka.ms/pyblog
    @nnja • nina.to/au19

    View Slide

  36. !
    GOTCHAS
    @nnja • nina.to/au19

    View Slide

  37. !
    DON'T LEAVE BREAKPOINTS
    IN PRODUCTION CODE!
    @nnja • nina.to/au19

    View Slide

  38. !
    TIP: USE
    git pre-commit HOOKS
    ‣Prevent commits that
    match conditions
    ‣I use pre-commit.com
    ‣includes debug-statements
    hook
    ‣checks for:
    pdb, ipdb, pudb,
    breakpoint() & more
    @nnja

    View Slide

  39. !
    WRAPPING UP
    @nnja • nina.to/au19

    View Slide

  40. ADDITIONAL RESOURCES
    ‣ Interactive pdb Tutorial (also in Korean)
    ‣ Python 3.7’s new builtin breakpoint — a
    quick tour
    THANKS

    !
    Thea Flowers
    @nnja • nina.to/au19

    View Slide

  41. THANKS!
    @NNJA
    SLIDES:
    nina.to/au19
    PYTHON @ MICROSOFT:
    aka.ms/au19py

    View Slide