Отладка перерывов в работе Rails в ActiveSupport::Callbacks.run

Ruby-debug зависает, разбивая зарезервированное слово ruby ​​"break" в строке 94 activesupport-2.3.5/lib/active_support/callbacks.rb.

  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 ломается по слову «break» для каждого обратного вызова ActiveSupport. Это сделало почти всю мою отладку бесполезной, так как обратный вызов запускается очень часто. Я больше не могу запускать какие-либо из моих тестов rspec, так как точка останова обратного вызова срабатывает много раз для каждой спецификации.

Вот список всех установленных на данный момент гемов: http://pastie.org/854538

Обновление: я попытался удалить ruby-debug и ruby-debug-base, и теперь я получаю следующее сообщение, когда когда-либо запускаю свои спецификации. Я переустанавливаю эти драгоценные камни по мере необходимости.

debugger statement ignored, use -u or --debugger option on rspec to enable debugging

Я не знаю, как обойти это. Есть идеи?


person Sean McCleary    schedule 04.03.2010    source источник


Ответы (1)


Я узнал, почему это происходит. Я посмотрел, какой метод отвечает за запуск обратного вызова, и понял, что это один из моих собственных методов с точкой останова «отладчика». Я просто сбился с толку, увидев разрыв отладчика в ActiveSupport::Callbacks. Моя точка останова отладчика находилась в последней строке метода, поэтому отладчик, естественно, перешел к следующей исполняемой строке, которая находилась в ActiveSupport::Callbacks.run. Спасибо Igal за помощь с этим.

person Sean McCleary    schedule 04.03.2010