Как установить переменную в отладчике Ruby (ruby-debug / rdebug)? - PullRequest
2 голосов
/ 13 января 2011

Предположим, у меня есть очень простая программа на Ruby:

require 'rubygems'
require 'ruby-debug'
x = 1
debugger
puts x

Когда выполнение попадает в команду «отладчик», оно корректно останавливается и выдает приглашение «rdb».

Теперь: моя цель - напечатать программу 2 вместо 1. Как это сделать? Если я наберу 'help', то rdebug скажет мне:

ruby-debug help v0.10.4
Type 'help <command-name>' for help on a specific command

Available commands:
backtrace  delete   enable  help  method  putl     set     trace    
break      disable  eval    info  next    quit     show    undisplay
catch      display  exit    irb   p       reload   step    up       
condition  down     finish  kill  pp      restart  thread  var      
continue   edit     frame   list  ps      save     tmate   where

Команда 'set' выглядит многообещающе ... но:

(rdb:1) help set
Modifies parts of the ruby-debug environment. Boolean values take
on, off, 1 or 0.
You can see these environment settings with the "show" command.

-- 
List of set subcommands:
--  
set annotate -- Set annotation level
set args -- Set argument list to give program being debugged when it is started
set autoeval -- Evaluate every unrecognized command
set autolist -- Execute 'list' command on every breakpoint
set autoirb -- Invoke IRB on every stop
set autoreload -- Reload source code when changed
set basename -- Report file basename only showing file names
set callstyle -- Set how you want call parameters displayed
set debuggertesting -- Used when testing the debugger
set forcestep -- Make sure 'next/step' commands always move to a new line
set fullpath -- Display full file names in frames
set history -- Generic command for setting command history parameters
set keep-frame-bindings -- Save frame binding on each call
set linetrace+ -- Set line execution tracing to show different lines
set linetrace -- Set line execution tracing
set listsize -- Set number of source lines to list by default
set trace -- Display stack trace when 'eval' raises exception
set width -- Number of characters the debugger thinks are in a line    

Без кубиков. Что делать?

Я посмотрел Официальный документ ruby-debug и посмотрел документ RailsGuides по отладке приложений Rails , но не увидел ответа.

Ответы [ 3 ]

4 голосов
/ 14 января 2011

Ответы Майка и Нуди великолепны!Однако обратите внимание, что «конец» в примере Майка идет до конца метода или блока (который фактически является концом программы), в то время как «продолжение» в решении noodi продолжает выполнение.

Также обратите внимание, что тамесли «set autoeval» установлен на «on», то все, что вы вводите в приглашении (rdb), не являющееся командой, автоматически оценивается.Следовательно, вам не нужно вводить «px = 1», вместо этого можно ввести «x = 1» и не нужно входить в irb, чтобы избежать «p» или «eval».

В новых отладчиках серии Trepanning https://github.com/rocky/rb-trepanning/wiki и https://github.com/rocky/rbx-trepanning/wiki, это включено по умолчанию.

2 голосов
/ 13 января 2011
→ ruby temp.rb 
temp.rb:5
puts x
(rdb:1) irb
ruby-1.9.2-p0 > x
 => 1 
ruby-1.9.2-p0 > x = 2
 => 2 
ruby-1.9.2-p0 > ^D
temp.rb:5
puts x
(rdb:1) cont
2
2 голосов
/ 13 января 2011

Вам нужно использовать eval или p, а затем finish, чтобы продолжить выполнение сценария. Что-то вроде:

(rdb:1) p x=2
2
(rdb:1) finish
2
...