0

Ruby-debugは、94行目のactivesupport-2.3.5 / lib / active_support/callbacks.rbの「break」ruby予約語を壊してハングアップしています。

  def run(object, options = {}, &terminator)
    enumerator = options[:enumerator] || :each

    unless block_given?
      send(enumerator) { |callback| callback.call(object) }
    else
      send(enumerator) do |callback|
        result = callback.call(object)
        break result if terminator.call(result, object) # This line is the culprit
      end
    end
  end

私はbreakがRubyの予約語であることを知っており、ruby-debugが各ActiveSupportコールバックの「break」という単語を壊していることに驚いています。コールバックが非常に頻繁にトリガーされるため、これによりほとんどすべてのデバッグが役に立たなくなりました。仕様ごとにコールバックブレークポイントが何度もトリガーされるため、rspecテストを実行できなくなりました。

これが私の現在インストールされているすべての宝石のリストです:http://pastie.org/854538

更新:ruby-debugとruby-debug-baseを削除しようとしましたが、スペックを実行するたびに次のメッセージが表示されます。必要に応じて、これらの宝石を再インストールしています。

デバッガーステートメントは無視されます。デバッグを有効にするには、rspecで-uまたは--debuggerオプションを使用します

これを回避する方法がわかりません。何か案は?

4

1 に答える 1

0

なぜこれが起こっているのか分かりました。コールバックのトリガーを担当するメソッドを調べたところ、それが「デバッガー」ブレークポイントを備えた独自のメソッドであることがわかりました。ActiveSupport::Callbacks でデバッガが壊れているのを見て混乱しました。デバッガーのブレークポイントはメソッドの最後の行にあったため、デバッガーは自然に ActiveSupport::Callbacks.run にある次の実行可能な行に移動しました。これを手伝ってくれたイガルに感謝します。

于 2010-03-04T23:10:22.353 に答える