我有一个看起来像这样的函数:
def search_street_addresses(query, limit: 100)
if query.is_a? String
query = @address_parser.parse(query)
fail ArgumentError, "Invalid address string" if query.nil?
end
# ...
它的名字是这样的:
begin
results = @ndi.search_street_addresses(query)
rescue ArgumentError
raise CommandError, "Failed to parse address"
end
它在我的机器上完美运行。我已经使用调试器逐步完成了代码,一切都按预期工作。问题是,在同事的机器上(与我完全相同的代码和完全相同的Ruby版本),似乎发生了一件看似不可能的事情。在调用@ndi.search_street_addresses(query)
和函数的第一行之间,引发ArgumentError
。我插入了一个这样的断点:
begin
require "byebug"; byebug
results = @ndi.search_street_addresses(query)
# ...
并尝试进入该功能,但ArgumentError
在我拍摄的第一个step
之后被提升,而我没有进入该功能。我还在函数中设置了一个断点:
def search_street_addresses(query, limit: 100)
require "byebug"; byebug
if query.is_a? String
# ...
但ArgumentError
在没有断点触发的情况下被提升。这只发生在他的机器上,一切都在我的完美。我不知道如何调试这个,因为ArgumentError
似乎是在Byebug范围之外的Ruby以太某处提升的。
因此;我该如何调试呢?
答案 0 :(得分:2)
天启的答案;我的同事重新安装了Ruby,现在一切正常。我不确定是要删除这个问题,还是留下这个答案,或许可以为其他人节省几个小时的无意义调试。