簡體   English   中英

如何在Ruby 1.9中調試require

[英]How can I debug require in Ruby 1.9

根據the Tin Man的意見,我提出了一個新問題。

原始問題在這里: Rubygem如何要求所有寶石?

我用來調試的原始代碼:

require 'debugger'
debugger
require 'thor'

這是兩難選擇:

  1. 使用默認的-rdebug調試,我無法使用Rubygem的源代碼
  2. 使用debugger gem進行debugger ,我必須在調試之前進行require (我在上一個問題中嘗試的方式,這是不可接受的,因為在到達那里之前發生了重要的事情)

希望找到一種調試IT的方法。

當需要rubygems時,它將用自己的Ruby方法替換Ruby的Kernel.require方法,該方法在已安裝的gems中搜索所需的文件 與Ruby 1.9及更高版本的集成基本上是在啟動過程中require 'rubygems'調用 可以使用ruby可執行文件的(disable --disable-gems--disable-gems disable --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在您調用require 'debugger'且加載了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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM