Remember to
- download
debugging-example-unfixed.Randdebugging-example-fixed.R.- send
debugging-example-unfixed.Rto students so they can follow along.- set up a new
Gitproject that includesdebugging-example-unfixed.R.
Basic Manual Debugging Strategy
- How do we figure out what’s wrong with a program?
- Be a scientist.
- Hypothesize about what is wrong.
- Make one change that is expected to fix error.
- Check if change worked/fixed error.
- Read the error message.
- Talk through the code.
- Observe what the code is doing.
- Rubber duck programming
- Do not change something without a reason.
- Be a scientist.
Observe
Run
debugging-example-unfixed.R.
- Read the error message and try to fix it.
- Where did code fail?
- Traceback
options(error = tamper::tamper)helps with pipes (%>%)
- Read the code.
- Look at the current state of the environment.
- This gives us a snapshot of what’s going on in the code.
- Can’t see variables inside the function
Run line by line
- Run the code line by line checking each step.
- More difficult once functions are involved
- Use
print()to verify input and output. - Run function with simplified input.
- Write test script that separates function from other code chunks.
- Use
print() statements
- Shows us things that we can’t see after error
- Dynamic changes in code (e.g.,
forloop objects) - Things inside functions
- Dynamic changes in code (e.g.,
print(head(df))
Fix error by passing
data_size_classinstead ofdata. Rundebugging-example-unfixed.R.
- Something seems weird about these results.
- Difficult to tell with manual strategy
Debugger
- Like a
print()statement, but better- Contains a complete snapshot of the status of the program
- Let’s you walk through the code dynamically
- Doesn’t accidentally get left in the code
Break points
- Insert breakpoint.
- Source the code.
- Program runs until breakpoint and stops (before executing the line of code).
- Environment gives the current values for all variables.
- Local and global
- Can switch scopes with dropdown
Stepping
Next- Runs next line of code
- Does not enter functions
Step Into- Goes line by line through the code including entering functions
Step Out- Leaves the current function or loop
- Returns to whatever called it
Continue- Continues to the next breakpoint
Bugs to fix
- Passes
datainstead ofdata_size_class - Not using
threshold - Not passing
threshold
