【发布时间】:2020-01-23 16:58:36
【问题描述】:
我在 Ruby 2.5 下使用 Pry 来调试基类中的问题 (Net::HTTP)
我收到由 HTTP 404 响应引起的异常,我想检查所发出请求的正文。为此,我想检查传递给start 的块,但start 方法没有参数,它使用yield 调用:
Frame type: method
From: /usr/share/ruby/net/http.rb @ line 910 Net::HTTP#start:
905: def start # :yield: http
906: raise IOError, 'HTTP session already opened' if @started
907: if block_given?
908: begin
909: do_start
=> 910: return yield(self)
使用Pry 是否有任何方法可以查看块的来源,如果该块没有传入&block 参数?
看到了Printing the source code of a Ruby block,但这对我没有帮助,因为我没有可以在这里使用的方法参数。
【问题讨论】:
-
作为一个 hacky 解决方法,您可以编辑此文件并将其更改为将块作为显式参数 (
&blk) - 这样您就可以在其上调用.to_ruby -
谢谢@maxpleaner。我想我解决了引发此问题的
Net::HTTP问题,但我仍然对检查块的最佳方法感兴趣,理想情况下无需编辑 gem 或发行版提供的 ruby 文件。 -
说得太早了!看起来我必须编辑我正在使用的 gem 的来源,这使得
Net::HTTP调用... -
如果你真的被卡住了,别忘了你可以用你自己的方法来修补
Net::HTTP的元素,这些方法可以拦截、检查、报告,以及用参数和结果做其他事情。这在调试难以导航的第三方库时非常方便。