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.

E84b0476f3dc431aac7c8f5c71ed032b?s=128

Nina Zakharenko

August 03, 2019
Tweet

Transcript

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

    @NNJA
  2. whoami? @nnja nnja ✏ nina.to nina.to/au19

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

  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
  5. (THIS IS MY WAY) NOT ONE "RIGHT" WAY @nnja •

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

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

  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"]
  9. PRINT @nnja • nina.to/au19

  10. A DEBUGGER HELPS YOU EXAMINE THE STATE OF A RUNNING

    PROGRAM @nnja • nina.to/au19
  11. DEBUGGING @nnja • nina.to/au19

  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
  13. TYPES OF DEBUGGERS @nnja • nina.to/au19

  14. CLI ‣ pdb (in standard library) ‣ ‣ ipdb- ipdb

    (via pip install ipdb) ‣ & more... @nnja • nina.to/au19
  15. @nnja

  16. GRAPHICAL DEBUGGERS ‣ pudb (graphical CLI) ‣ IDEs ‣‣ Visual

    Studio Code ‣PyCharm ‣ & others ... @nnja • nina.to/au19
  17. None
  18. BREAKPOINTS @nnja • nina.to/au19

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

  20. breakpoint() ADVANTAGES ‣ set your debugger of choice (I like

    ipdb) ‣set: PYTHONBREAKPOINT=ipdb.set_trace @nnja • nina.to/au19
  21. breakpoint() ADVANTAGES environment variable that allows you skip all debug

    breakpoints $ PYTHONBREAKPOINT=0 python3.7 prod_code.py @nnja • nina.to/au19
  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
  23. DEBUGGER FUNDAMENTALS @nnja • nina.to/au19

  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) <optional command> @nnja • nina.to/au19
  25. None
  26. DEBUGGERS IN CLIS IN ACTION @nnja • nina.to/au19

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

  28. PYTHON EXTENSION FOR VS CODE ‣ 1. Download VS Code

    ‣ 2. Install Python Extension ‣ 3. Create a Debugger Configuration ‣
  29. VISUAL BREAKPOINTS @nnja • nina.to/au19

  30. DEMO @nnja • nina.to/au19

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

  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
  33. TIPS & TRICKS @nnja • nina.to/au19

  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
  35. BONUS: DEBUGGING JUPYTER NOTEBOOKS IN VS CODE ! : aka.ms/pyblog

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

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

  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
  39. ! WRAPPING UP @nnja • nina.to/au19

  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
  41. THANKS! @NNJA SLIDES: nina.to/au19 PYTHON @ MICROSOFT: aka.ms/au19py