|
|||
-r debug, además de otras opciones y el nombre de tu script:
ruby -r debug [
opciones
] [
nombreprograma
] [
argumentos
]
|
readline en Ruby, puedes usar
las teclas cursor para
moverte adelate y atrás en el historial de comandos y usar comandos de la línea de edición
para corregir lo introducido anteriormente.
Para que te hagas una idea del aspecto que tiene el depurador de Ruby, aquí
está una sesión de muestra.
% |
irb [
opciones-irb
] [
script_ruby
] [
opciones
]
|
% irb irb(main):001:0> |
| Figura no disponible.. |
Meta-| para ejecutarlo. El intérprete de Ruby
usará la región seleccionada como entrada estándar y la salida irá a un buffer
llamado ``*Shell Command Output*.'' Ésta funcionalidad nos ha sido
de mucha ayuda durante la redacción de este libro---simplemente con seleccionar
unas cuantas líneas en el medio de un párrafo, ya lo podíamos probar.
También se puede hacer algo parecido en el editor vi usando ``:!ruby'',
que reemplaza el texto del programa con su salida, o
``:w
!ruby'', que muestra la salida sin afectar
al código. Existen más editores que tienen características parecidas.
Y ya que estamos hablando del tema, quizá sea un buen momento para
mencionar que existe un modo Ruby en Emacs, incluído en la distribución
como misc/ruby-mode.el. Existen también varios módulos de
resaltado de sintaxis para vim (una versión mejorada del editor
vi), jed, y otros editores diponibles en internet. Mira en la FAQ de Ruby
para conocer sus localizaciones y disponibilidad.
setter= como una asignación a una variable local, y no como
una llamada a un método. Usa self.setter= para forzar la llamada al método.
end
en algún sitio.
Object#type
para mirar el tipo de un objeto.
{}
en lugar de do/end.
$stdout como a $stderr, la salida
puede que no aparezca en el orden esperado. Usa siempre E/S
sin buffer (establece sync=true) para los mensajes de depuración.
String, y Ruby no lo convierte
automáticamente. Una llamada a to_i
funcionará perfectamente. Un
error típico de programador de Perl es:
while gets num1, num2 = split /,/ # ... end |
Hash#rehash
si lo hace).
trace_var para comprobar cuándo cambia de valor una variable.
Object#freeze
. Si sospechas que
alguna porción de código desconocida está cambiando el valor de una variable
a un valor extraño, intenta congelar la variable. El culpable será identificado
cuando intente modificarla.
x e y
nuevas
en cada
iteración, pero en el segundo no lo hace. Usaremos el paquete
benchmark del Ruby Application Archive para comparar
los bucles:
require "benchmark"
include Benchmark
n = 1000000
bm(12) do |test|
test.report("normal:") do
n.times do |x|
y = x + 1
end
end
test.report("predefine:") do
x = y = 0
n.times do |x|
y = x + 1
end
end
end
|
user system total real normal: 2.450000 0.020000 2.470000 ( 2.468109) predefine: 2.140000 0.020000 2.160000 ( 2.155307) |
-r
profile, o desde el propio código con require
"profile". Por ejemplo:
require "profile" class Peter def initialize(amt) @value = amt end def rob(amt) @value -= amt amt end end class Paul def initialize @value = 0 end def pay(amt) @value += amt amt end end peter = Peter.new(1000) paul = Paul.new 1000.times do paul.pay(peter.rob(10)) end |
time seconds seconds calls ms/call ms/call name 32.14 0.27 0.27 1 270.00 840.00 Fixnum#times 30.95 0.53 0.26 1000 0.26 0.27 Paul#pay 29.76 0.78 0.25 1000 0.25 0.30 Peter#rob 5.95 0.83 0.05 1000 0.05 0.05 Fixnum#- 1.19 0.84 0.01 1000 0.01 0.01 Fixnum#+ 0.00 0.84 0.00 1 0.00 0.00 Paul#initialize 0.00 0.84 0.00 2 0.00 0.00 Class#inherited 0.00 0.84 0.00 4 0.00 0.00 Module#method_added 0.00 0.84 0.00 1 0.00 0.00 Peter#initialize 0.00 0.84 0.00 1 0.00 840.00 #toplevel 0.00 0.84 0.00 2 0.00 0.00 Class#new |
Comandos del depurador
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||