Почему ruby-debug не позволяет мне видеть локальные переменные в моих спецификациях? - PullRequest
2 голосов
/ 19 ноября 2009

Я пытаюсь использовать ruby-debug для отладки своих спецификаций. Когда я делаю это, я не могу получить доступ к локальным переменным. Переменные экземпляра, однако, в порядке. Есть ли способ заставить это работать с локальными переменными?

Вот пример спецификации:

require 'spec/autorun'
describe "empty spec" do
  it "should be able to be debugged" do
    x = 'foo'
    @x = 'bar'
    debugger
  end
end

В отладчике / irb я вижу @x, но не x. Подробный вывод.

Это просто ограничение использования ruby-debug с блоками или это то, что я могу сделать для меня?

(В то же время я использую больше переменных экземпляра, чем на самом деле в своих спецификациях.)

1 Ответ

3 голосов
/ 16 июня 2010

Пример, который вы приводите, проблематичен для ruby-debug. ruby-debug имеет ограничение, заключающееся в том, что он останавливается только при событиях «line» оператора, а вызов «debugger» является последним оператором блока. Поэтому в приведенном вами примере к тому времени, когда отладчик останавливается, вы больше не находитесь в блоке «должна быть возможность отладки», а x больше не существует.

Один обходной путь, который программисты, похоже, используют немного, - это поместить какое-то утверждение после «отладчика», но до конца.

В следующем воплощении rbdbgr (для YARV Ruby 1.9 с патчами) вы можете остановиться перед возвращением из блока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...