gpt4 book ai didi

ruby - 如何在 Ruby 1.9 中调试 require

转载 作者:数据小太阳 更新时间:2023-10-29 08:39:02 26 4
gpt4 key购买 nike

根据铁皮人的意见,我新开一个问题。

原始问题在这里:How does Rubygem require all gems?

我用来调试的原始代码:

require 'debugger'
debugger
require 'thor'

问题来了:

  1. 使用默认的 -rdebug 调试,我无法访问 Rubygem 的源代码
  2. 使用 debugger gem 进行调试,我必须在调试之前 require(我在上一个问题中尝试的方式,这是 Not Acceptable ,因为在我得到之前发生了一些重要的事情那里)

希望找到调试IT的方法。

最佳答案

当需要 rubygemsreplaces Ruby’s Kernel.require method with its own that searches for required files in the installed gems .与 Ruby 1.9 及更高版本的集成基本上是一个 call to require 'rubygems' during start up .这可以通过 ruby 可执行文件的(记录不完整的)--disable-gems 选项来禁用。在显式调用 require 'rubygems' 之前,您可以利用它来设置调试。

# start with ruby --disable-gems
require 'debug' #standard library debug - doesn't load rubygems

require 'rubygems' #now you can debug this

如果你想使用 debugger gem对于你的调试,它仍然是可能的,但有点棘手,因为你必须加载 debugger 而不加载 Rubygems。为此,您需要手动设置加载路径以包含 Debugger 的 lib 目录,以及 Debugger 所依赖的任何 gem 的 lib 目录。当您调用 require 'debugger' 并加载 Rubygems 时,这基本上就是 Rubygems 为您所做的。

要确定调试器需要什么库,您可以使用此命令:

 ruby -e "lp = $:.dup; gem 'debugger'; puts $: - lp"

这是一个小的 Ruby 脚本,它首先获取加载路径的副本($: 是加载路径,您也可以使用 $LOAD_PATH),然后激活调试器 gem,然后打印出新加载路径与原始加载路径之间的差异。这将为您提供激活 debugger 添加到加载路径的目录。

在我的机器上看起来像这样:

$ ruby -e "lp = $:.dup; gem 'debugger'; puts $: - lp"
/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/columnize-0.3.6/lib
/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-ruby_core_source-1.2.0/lib
/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-linecache-1.2.0/lib
/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-1.5.0/lib

您现在可以使用它来创建一个脚本来使用 Debugger 来调试 require 'rubygems':

# start with ruby --disable-gems

# set up the load path without loading rubygems
$:.unshift '/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/columnize-0.3.6/lib'
$:.unshift '/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-ruby_core_source-1.2.0/lib'
$:.unshift '/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-linecache-1.2.0/lib'
$:.unshift '/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-1.5.0/lib'

# require debugger and start it
require 'debugger'
debugger

require "rubygems" #now you can debug this with debugger

关于ruby - 如何在 Ruby 1.9 中调试 require,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16064619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com