为什么 `binding.pry` 停在错误的地方?
Why `binding.pry` halts at the wrong place?
出于某种原因,当我使用 binding.pry
设置断点时,程序最终停止在一个完全不同的(和外星人看起来!)的地方。我做错了吗?
Gemfile(缩短)
gem "rails", "~> 4.1"
gem "pry"
gem "pry-rails"
gem "pry-doc"
gem "pry-stack_explorer"
gem "pry-byebug"
场景
断点:
class SomeController < Application controller
before_filter :filter
...
def filter
assignment = SkillAssignment.where(day: selected_date).first
if assignment
@day_skill = assignment.skill
@day_description = @day_skill.description
end
binding.pry
end
end
我登陆的地方(使用show-source
):
[1] pry(ActiveSupport::Callbacks::Filters::Before)> show-source
From: /home/yan-foto/workspaces/my-app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.0/lib/active_support/callbacks.rb @ line 156:
Owner: #<Class:ActiveSupport::Callbacks::Filters::Before>
Visibility: private
Number of lines: 16
def self.halting(next_callback, user_callback, halted_lambda, filter)
lambda { |env|
target = env.target
value = env.value
halted = env.halted
unless halted
result = user_callback.call target, value
env.halted = halted_lambda.call(target, result)
if env.halted
target.send :halted_callback_hook, filter
end
end
next_callback.call env
}
end
感谢@Manuel 和@Anthony 我现在知道这个问题是由 bug in pry-byebug
. Unfortunately this doesn't seem to be fixed any soon as mentioned by the developer in GitHub:
The current situation is that I hardly ever use pry-byebug, so I feel
less motivated to mantain software I don't use. :(
如果你想在最后一行有 binding.pry
,一个简单的解决方法是写这样的东西:
def myMethod
# magic
binding.pry
1 + 1
end
出于某种原因,当我使用 binding.pry
设置断点时,程序最终停止在一个完全不同的(和外星人看起来!)的地方。我做错了吗?
Gemfile(缩短)
gem "rails", "~> 4.1"
gem "pry"
gem "pry-rails"
gem "pry-doc"
gem "pry-stack_explorer"
gem "pry-byebug"
场景
断点:
class SomeController < Application controller
before_filter :filter
...
def filter
assignment = SkillAssignment.where(day: selected_date).first
if assignment
@day_skill = assignment.skill
@day_description = @day_skill.description
end
binding.pry
end
end
我登陆的地方(使用show-source
):
[1] pry(ActiveSupport::Callbacks::Filters::Before)> show-source
From: /home/yan-foto/workspaces/my-app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.0/lib/active_support/callbacks.rb @ line 156:
Owner: #<Class:ActiveSupport::Callbacks::Filters::Before>
Visibility: private
Number of lines: 16
def self.halting(next_callback, user_callback, halted_lambda, filter)
lambda { |env|
target = env.target
value = env.value
halted = env.halted
unless halted
result = user_callback.call target, value
env.halted = halted_lambda.call(target, result)
if env.halted
target.send :halted_callback_hook, filter
end
end
next_callback.call env
}
end
感谢@Manuel 和@Anthony 我现在知道这个问题是由 bug in pry-byebug
. Unfortunately this doesn't seem to be fixed any soon as mentioned by the developer in GitHub:
The current situation is that I hardly ever use pry-byebug, so I feel less motivated to mantain software I don't use. :(
如果你想在最后一行有 binding.pry
,一个简单的解决方法是写这样的东西:
def myMethod
# magic
binding.pry
1 + 1
end