据the Tin Man
的意见,我打开一个新的问题。
原来问题就在这里: 如何Rubygem要求所有的宝石?
原代码我用来调试:
require 'debugger'
debugger
require 'thor'
这里的困境:
- 使用默认调试
-rdebug
,我不能去Rubygem的源代码 - 与调试
debugger
的宝石,我必须require
之前,我调试(我在上一个问题,这是不可接受之前,我因为有重要的事情发生了尝试的方式)
希望能找到一种方法来调试。
据the Tin Man
的意见,我打开一个新的问题。
原来问题就在这里: 如何Rubygem要求所有的宝石?
原代码我用来调试:
require 'debugger'
debugger
require 'thor'
这里的困境:
-rdebug
,我不能去Rubygem的源代码 debugger
的宝石,我必须require
之前,我调试(我在上一个问题,这是不可接受之前,我因为有重要的事情发生了尝试的方式) 希望能找到一种方法来调试。
当rubygems
需要它取代了Ruby的Kernel.require
方法与自己的,搜索已安装的宝石所需的文件 。 使用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
宝石为您调试它仍然是可能的,但棘手的一点,你必须加载debugger
无需加载RubyGems的。 为了做到这一点,你需要手动设置您的负载路径包括调试器的lib目录,以及任何宝石的lib迪尔斯调试器依赖于。 这基本上就是RubyGems的为你做,当你调用require 'debugger'
与RubyGems的加载。
要确定调试器需要什么库,你可以使用这个命令:
ruby -e "lp = $:.dup; gem 'debugger'; puts $: - lp"
这是小的Ruby脚本,首先把负载路径的副本( $:
是负载路径,你也可以使用$LOAD_PATH
),然后激活调试器的宝石,然后打印出新的负载路径和原来的区别。 这会给你显示目录是激活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