Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

LIVETWEET #PYCONAU @NNJA nina.to/au19

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

DEMO APPLICATION @nnja • nina.to/au19

Slide 8

Slide 8 text

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"]

Slide 9

Slide 9 text

PRINT @nnja • nina.to/au19

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

DEBUGGING @nnja • nina.to/au19

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

TYPES OF DEBUGGERS @nnja • nina.to/au19

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

@nnja

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

BREAKPOINTS @nnja • nina.to/au19

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

DEBUGGER FUNDAMENTALS @nnja • nina.to/au19

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

DEBUGGERS IN IDES @nnja • nina.to/au19

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

VISUAL BREAKPOINTS @nnja • nina.to/au19

Slide 30

Slide 30 text

DEMO @nnja • nina.to/au19

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

TIPS & TRICKS @nnja • nina.to/au19

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

! GOTCHAS @nnja • nina.to/au19

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

! 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

Slide 39

Slide 39 text

! WRAPPING UP @nnja • nina.to/au19

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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