Agenda• Introduction to Rails Debugging - Role of testing - Examining the log files - Interpreting the stack trace - The better_errors gem - Rails console - Using pry gem to debug
Testing• First line of defense - Avoid defects in the first place• Since adopting TDD, time spent ‣ using a debugger ‣ writing log messages ‣ triaging defectshave all dropped significantly• Find a defect? - First step: write a test to reproduce it
General Debugging Tips• Reproduce the problem - Under what conditions does it occur ‣ data, configuration, environment - Write a unit/integration test if possible• Divide and Conquer - Reduce the places you have to look ‣ Logging statements ‣ Simplest conditions to reproduce ‣ Any recent changes?
General Debugging Tips• Pay attention to the data - Don’t jump to conclusions - Avoid “that can’t be the problem”• Be methodical - Talk the problem out ‣ Use “rubber ducky debugging” if solo - Change one thing at a time - Keep track of changes/ideas you’ve tried out - Periodically circle back and re-evaluate
Rails Log Files• Rails keeps log file for each environment - e.g. development.log, production.log• Log messages have severity levels - :debug, :info, :warn, :error, :fatal - config.log.level filters what gets logged• Writing your own log messages
Asset Pipeline Log Messages• Lots of messages related to asset pipeline• quiet_assets gem - suppresses asset pipeline messages - should be used in development only• thin web server - fixes a problem with message that shows up with quiet_assets gem and WEBrick• Gemfile
The better_errors gem• Richer error page ‣ Full stack trace ‣ Source code inspection for all stack frames ‣ Local and instance variable inspection ‣ Live REPL on every stack frame• Advanced features requires ‘binding_of_caller’ gem• Gemfile - Development only!
Using the Rails Console• Great playground to experiment - Especially handy for model access• Danger!!! - Good idea to run in sandbox to prevent changing data rails console --sandbox
pry gem• pry is an IRB replacement - live help - syntax highlighting - navigate scope - and much, much, more• pry also supports plugins...lots of them - check out www.rubygems.org for full list• pry-debugger gem - step, next, continue
Debug Using an IDE• If you come from a background where you have used an IDE, e.g. Java or C#, an IDE is an option• RubyMine has an integrated debugger - Does not play well with pry-debug or other debuggers
Summary• Divide and Conquer Strategy• Be methodical• Check the logs for clues• Testing is the best defense• Questions?