我有一个函数是这样的:
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
被提升,而我从未进入函数。我还在函数中设置了一个断点:def search_street_addresses(query, limit: 100)
require "byebug"; byebug
if query.is_a? String
# ...
但是
step
是在没有断点触发的情况下引发的。这只发生在他的机器上,我的机器上一切正常。我一点也不知道该如何调试它,因为ArgumentError
似乎是在Byebug无法触及的Ruby乙醚中的某个地方提出的。那么,我该如何调试它呢?
最佳答案
不着边际的回答;我的同事重新安装了ruby,现在一切正常。我不确定是删除这个问题,还是让这个答案为其他人节省几个小时毫无意义的调试。