我有一个函数是这样的:

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,现在一切正常。我不确定是删除这个问题,还是让这个答案为其他人节省几个小时毫无意义的调试。

10-07 21:09