CSC/ECE 517 Fall 2013/ch1 1w12 vn: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 51: Line 51:
{| class="wikitable"
{| class="wikitable"
|-
|-
! style="width:20%;"|Purpose
! style="width:40%;"|Purpose
! style="width:80%;"|Command/Method/Procedure
! style="width:80%;"|Command/Method/Procedure
|- style="vertical-align:top;"
|- style="vertical-align:top;"
Line 61: Line 61:
| Configure a new logger
| Configure a new logger
| config.logger = Logger.new(..)
| config.logger = Logger.new(..)
We can also specify a logger x  in our environment file as
We can also specify a logger x  in our environment file as
Rails.logger = x::Logger.new(..)
Rails.logger = x::Logger.new(..)
|}
|}



Revision as of 01:46, 17 September 2013

Introduction

Rails is an open-source web application framework which makes use of Ruby programming language. With its huge library of gems and support for MVC architecture, it provides an easy and clean approach for creating pages, talking to web server and dealing with databases. Debugging is always an important part of any application development for which Rails provides a tremendously good support despite being an interpreted language as opposed to C or Java or any other compiled language.

Debugging Options

Rails provides a range of options to make debugging easier. Some of these options have been discussed in the sections below.

Debug Helpers

One of the easiest ways to debug is to simply output the value of different variables which provides us the first look into what could be going wrong. This could be done in all of models, views and controllers. Rails provides three methods-debug, to_yaml and inspect to achieve this task. These methods create human-readable data from any object [1]. The examples below show the output when these methods are used in a view.

Code Output
<%= @users.to_yaml %> --- - !ruby/object:User attributes: id: 2 name: Jimmy Page email: jimmy.page@gmail.com created_at: 2013-09-14 02:37:16.322638000 Z updated_at: 2013-09-16 20:38:04.250678000 Z
<%= @users.inspect %> #<ActiveRecord::Relation [#<User id: 2, name: "Jimmy Page", email: "jimmy.page@gmail.com", created_at: "2013-09-14 02:37:16", updated_at: "2013-09-16 20:38:04">]>
<%= debug @users %> ---

- !ruby/object:User

 attributes:
   id: 2
   name: Jimmy Page
   email: jimmy.page@gmail.com
   created_at: 2013-09-14 02:37:16.322638000 Z
   updated_at: 2013-09-16 20:38:04.250678000 Z

Logger

Logger class in Ruby helps us save information at runtime . A log file gives information like : various sql queries related to the database, methods executed on the controller, attributes of the controller. Default logger for Rails is ActiveSupport::Logger and log files varies for different runtime environments. There are 5 logging levels with 0 (debug) being the lowest.

FATAL: An error that cannot be handled and results in a program crash ERROR: An error that cannot be handled WARN: A warning INFO: Information about system operation DEBUG: Information for developers

Level order is DEBUG < INFO < WARN < ERROR < FATAL. Default logger level for development and production environments are debug and info respectively.

The sections below list down various useful commands/methods for debugging purposes.

Purpose Command/Method/Procedure
Change default log level config.log_level = 0

Rails.logger.level = 0 The above changes are done in environment.rb file.

Configure a new logger config.logger = Logger.new(..)

We can also specify a logger x in our environment file as Rails.logger = x::Logger.new(..)

  • Change default log level

config.log_level = 0 Rails.logger.level = 0


  • Configure a new logger

config.logger = Logger.new(..)

We can also specify a logger x in our environment file as

Rails.logger = x::Logger.new(..)

  • Clear log messages

rake log:clear

  • Display log file information on terminal window(UNIX, development environment)

tail -f log/development.log

  • Put custom messages for debug in models/controllers/views

logger.debug logger.debug_variables

  • Put custom messages for debug in any other custom class

RAILS_DEFAULT_LOGGER

  • Change format of logger messages by overriding

format_messages(level, time, progname, message)


Graphical Debugger

Rubymine, a commercial IDE by JetBrains, has a graphical debugger for ruby and rails code. It provides important and useful features such as smart breakpoints, dedicated view for watches and stack, expression evaluator, etc. Some of the key features related to debugging are presented below.

  • Breakpoint

One can put breakpoint by simply clicking on the start of the line in the window or pressing Ctrl+Shift+F8. Breakpoint feature highlights the corresponding line in the code.

  • Frames, Variables and Watches

Rubymine debugger shows a separate window for frames, variables and watches when the execution hits a breakpoint. User can look in the corresponding window for more information.

  • Evaluate code and expressions

Users can type in expression or code and evaluate it when the breakpoint is hit or on the fly.


  • Options

Rubymine debugger provides a lot of other options for debugging.