当需要使用
rubygems
时,它会
替换Ruby的Kernel.require
方法,并使用自己的方法在已安装的gems中搜索所需文件。与Ruby 1.9及以上版本的集成基本上是在启动时
调用require 'rubygems'
。可以通过
--disable-gems
选项来禁用此功能(文档不太清晰),该选项适用于
ruby
可执行文件。您可以在明确调用
require 'rubygems'
之前使用此选项来设置调试。
require 'debug'
require 'rubygems'
如果你想使用
debugger
gem 进行调试,仍然可以实现,但需要更加巧妙,因为你必须在不加载 Rubygems 的情况下加载
debugger
。为了做到这一点,你需要手动设置你的加载路径,包括 Debugger 的 lib 目录以及任何 Debugger 依赖的 gem 的 lib 目录。当你使用已加载 Rubygems 的
require 'debugger'
命令时,这基本上就是 Rubygems 为你做的事情。
要确定 Debugger 需要哪些 libs,你可以使用以下命令:
ruby -e "lp = $:.dup; gem 'debugger'; puts $: - lp"
这是一个小的Ruby脚本,首先复制了加载路径(
$:
是加载路径,你也可以使用
$LOAD_PATH
),然后激活Debugger宝石,最后打印出新加载路径和原始加载路径之间的差异。这将给出激活
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
现在,您可以使用此方法创建一个脚本来使用调试器调试require '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'
debugger
require "rubygems"