gpt4 book ai didi

ruby - 使用 byebug 调试时如何缩放堆栈?

转载 作者:数据小太阳 更新时间:2023-10-29 07:53:13 29 4
gpt4 key购买 nike

我目前收到如下所示的错误:

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弄清楚为什么对象是 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 < 1.5.0 的答案(也适用于调试器或 ruby​​-debug)

Byebug.start 被调用之前,Byebug 不会开始跟踪调用堆栈信息,它由 byebug 命令在内部调用。因此,当您收到调试提示时,只保存了一个调用堆栈帧,这就是您收到该消息的原因:

Warning: saved frames may be incomplete; compare with caller(0)

这就是为什么您不能向上向下移动的原因:只有一帧。

要正确导航堆栈,您需要在更高的位置启动 Byebug,方法是将 Byebug.start 放在您想要开始跟踪调用堆栈信息的任何位置。例如,在 google_geocoding_validation_engine_spec.rb 的第 56 行之前。如果你想要完整的堆栈信息,你可以从一开始就运行 byebug,通过运行 byebug 可执行文件:

byebug rake

或者您正在运行您的规范。

如果还有问题,请告诉我!

希望这对您有所帮助。

关于ruby - 使用 byebug 调试时如何缩放堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17044127/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com