我目前收到如下错误:
NoMethodError: undefined method `debug' for nil:NilClass
/mnt/hgfs/Dropbox/Company/Project/lib/project/misc.rb:23:in `debug'
/mnt/hgfs/Dropbox/Company/Project/lib/project/validation/google_geocoding_validation_engine.rb:49:in `block in compare_addresses'
/mnt/hgfs/Dropbox/Company/Project/lib/project/validation/google_geocoding_validation_engine.rb:43:in `each'
/mnt/hgfs/Dropbox/Company/Project/lib/project/validation/google_geocoding_validation_engine.rb:43:in `compare_addresses'
/mnt/hgfs/Dropbox/Company/Project/lib/project/validation/google_geocoding_validation_engine.rb:32:in `valid?'
/mnt/hgfs/Dropbox/Company/Project/specs/project/validation/google_geocoding_validation_engine_spec.rb:56:in `block (2 levels) in <module:Validation>'
/home/tomas/ruby2/lib/ruby/2.0.0/minitest/unit.rb:1301:in `run'
我想我会尝试使用byebug https://github.com/deivid-rodriguez/byebug找出该物体为何存在nil
因为它不应该是nil
。我放置了byebug
就在错误行的上方:
def debug(&block)
if @logger.nil?
byebug
end
@logger.debug(@logger_name, &block)
end
并进行了测试。我被扔到了byebug调试界面,可以确认该对象确实是nil
。问题是我无法爬上堆栈:
(byebug) up
*** Adjusting would put us beyond the oldest (initial) frame.
(byebug) down
*** Adjusting would put us beyond the newest (innermost) frame.
(byebug) backtrace
--> #0 AddressKit::Misc::Logging.debug(block#Proc) at /mnt/hgfs/Dropbox/Kvantel/Address Kit/lib/addresskit/misc.rb:25
Warning: saved frames may be incomplete; compare with caller(0)
为什么我不能上堆栈?这是 byebug 的问题还是与 MiniTest 不兼容?
byebug >= 1.5.0 的答案
在这种情况下打印和移动调用堆栈应该只是工作并且OP不会有这个问题。
byebug
Byebug 不会开始跟踪调用堆栈信息,直到Byebug.start
被调用,这是由内部调用的byebug
命令。因此,当您收到调试提示时,仅保存了一个调用堆栈帧,这就是您收到该消息的原因:
Warning: saved frames may be incomplete; compare with caller(0)
这就是为什么你不能动up
or down
: 只有一帧。
为了正确地导航堆栈,您需要通过删除来从更高的位置启动 ByebugByebug.start
无论你想开始跟踪调用堆栈信息。例如,在第 56 行之前google_geocoding_validation_engine_spec.rb
。如果您想要完整的堆栈信息,您可以通过运行 byebug 可执行文件从一开始就运行 byebug:
byebug rake
或者无论如何你正在运行你的规格。
如果您仍有问题,请告诉我!
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)