当需要rubygems
它replaces 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目录。这基本上是Rubygems为您加载Rubygems时调用require 'debugger'
所做的。
要确定调试器需要什么库,你可以使用这个命令:
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
现在,您可以使用它来创建一个脚本来使用调试器来调试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
能否请你做的一个小例子你想调试的代码? – mdesantis
http://stackoverflow.com/questions/16063144/how-does-rubygem-require-all-gems @ProGNOMmers – rhapsodyn
由于这个答案不同于另一个,你可以在这里复制与这个答案相关的代码,所以对这个答案的理解不依赖于另一个:-) – mdesantis