rubygems
需要时,它会用自己的方法替换 Ruby 的Kernel.require
方法,在已安装的 gems 中搜索所需的文件。与 Ruby 1.9 及更高版本的集成基本上是在启动期间调用require 'rubygems'
。这可以通过可执行文件的(记录不--disable-gems
充分的)选项来禁用。ruby
在显式调用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
),然后激活 Debugger 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