Skip to content


Debugear en Rails con ruby-debug

Investigando podemos descubrir diferentes formas para debugear en RoR, para el caso he elegido hacerlo con ruby-debug, no sólo por su utilidad sino por la extensa lista de recomendaciones que existen en la red. Kent Sibilev, es el creador de esta gema, que desde el principio nacía con una importante mejora de rendimiento sobre el tradicional rdebug, esto es posible dado que utiliza una extensión nativa haciendo uso directo de la API Ruby en C, en lugar de usar la API Kernel#set_trace_func.

Algunas de las funcionalidades aportadas son:

  • avanzar y retroceder en nuestro código mientras debugeamos.
  • ejecutar o saltar líneas de codigo
  • listar el contexto actual en el que estamos detenidos
  • realizar cambios en caliente sobre el código y poder recargar
  • usar el modo irb, además de tener un modo consola propio más potente que el anterior

Para comenzar a utilizarlo, basta con tenerlo instalado, para ello:

sudo gem install ruby-debug

He observado que en algunos lugares, te recomiendan estar atento a la instalación, para seleccionar la plataforma sobre la que se va a instalar: Linux/Mac o Windows. Aquí tengo que decir que en mi caso, sobre Mac OS X, no tuve que elegir plataforma, dado que fue seleccionada de forma automática.

Para empezar a hacer uso del plugin, debemos configurar algunas cosas; la primera de ellas es añadir una línea a nuestro environment.rb:

SCRIPT_LINES__ = {} if ENV['RAILS_ENV'] == ‘development’

Con esto debemos de ser cautelosos. SCRIPT_LINES__ almacena todos los ficheros ruby leidos en un hash para poder decir luego en qué línea de código estamos. Esto sin duda puede causar problemas de rendimiento y algunos de consumo de memoria, de ahí que hayamos puesto que sólo se use en desarrollo. Debemos tener mucho cuidado para que no activemos el debug en entornos de producción.

Una vez, tenemos esto, bastaría con situarnos en nuestro código y añadir lo siguiente para poder empezar a debugear allí mismo:

require ‘ruby-debug’

def your_method

debugger if ENV['RAILS_ENV'] == ‘development’

end

El debug se parará justo en debugger.

Ahora arrancamos el servidor web el cual se detendrá en nuestro breakpoint y estaremos en modo consola en el mismo terminal en el que el servidor estaba trabajando, como decíamos es una consola más potente que IRB, algunos la comparan a GDB, el debugger de GNU para C.

En este momento, ya podemos interacturar, bastaría con conocer los comandos y podríamos debugear. Una lista de los más indispensables:

list: te muestra unas líneas de código y te dice donde estás detenido.

irb: pasas a la consola de IRB, puedes interactuar con los objetos, obtener valores, etc. Por ejemplo para ver el valor de una propiedad:

@users.name

exit: salir del IRB

PP (pretty print): para ver el contenido de forma bonita, por ejemplo un formulario:

pp params[:user][:email]
o
pp params

cont: continúa la ejecución

next: avanza a la siguiente línea de código

method: para listar los métodos de un objeto:

method instance @user

o si queremos listar los métodos de una clase:

method User

break: para ir a un sitio dado y saltar todo lo demás:

break Entry#create

para ir al método create de Entry

set autoreload: recarga el código para aceptar los cambios

Posted in Open Source, RubyOnRails, Tips & Tricks.

Tagged with , , .

You might also like

Rails 2.2 liberado Desde el viernes pasado tenemos disponible la versión 2.2 de Rails, por lo que ya podemos disfrutar...
Ruby on rails en Ubuntu Si instalar Ruby on Rails en Windows fue fácil, no pensé que instalarlo en linux, pudiese resultar...
Seguridad en Ruby on Rails He estado mirando con tranquilidad un post de Jonathan Weiss sobre seguridad, bueno más bien la presentación...
Reflexión tras la Conferencia Rails A finales de la semana pasada, se celebró en Madrid la Conferencia Rails 2008, tal como os comenté,...
Grab This Widget

2 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. David Calavera says

    Hola Jesús, te paso un estupendo post de como usar ruby-debug en Netbeans, un puntito más a favor de este IDE XD:

    http://www.jumbabox.com/2008/07/debugging-rails-with-netbeans/

    Saludos

  2. Jesús Navarrete says

    Gracias por el link.

    Tengo pendiente integrarlo con TextMate, o más bien contarlo, por la facilidad para hacerlo.



Some HTML is OK

or, reply to this post via trackback.