2

我有一个看起来像这样的函数:

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引发了 an 。我插入了一个这样的断点:

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 以太中的某个地方提出的。

所以; 我该如何调试?

4

1 回答 1

2

虎头蛇尾的回答;我的同事重新安装了 Ruby,现在一切正常。我不确定是删除这个问题还是留下这个答案,以便为其他人节省几个小时毫无意义的调试。

于 2014-04-15T07:42:38.367 回答