3

さんの意見に従ってthe Tin Man、私は新しい質問を開きます。

元の質問は次のとおりです: Rubygem はどのようにすべての gem を必要としますか?

デバッグに使用した元のコード:

require 'debugger'
debugger
require 'thor'

ここにジレンマがあります:

  1. デフォルトでデバッグすると-rdebugRubygemのソースコードに行けない
  2. debuggergem を使用してデバッグします。requireデバッグする前に行う必要があります (前の質問で試した方法ですが、そこに到達する前に何か重要なことが起こったため、受け入れられません)。

IT をデバッグする方法を見つけたいと思っています。

4

1 に答える 1

5

rubygems必要な場合は、Ruby のKernel.requireメソッドを、インストールされた gems で必要なファイルを検索する独自のメソッドに置き換えます。Ruby 1.9 以降との統合は、基本的にduring startup への呼び出し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を使用したい場合は、まだ可能ですが、debuggerRubygems をロードせずにロードする必要があるため、少し面倒です。これを行うには、ロード パスを手動で設定して、Debugger の lib ディレクトリと、Debugger が依存する gem の lib ディレクトリを含める必要があります。これは基本的に、Rubygems がロードされた状態で呼び出すときに Rubygems が行うことですrequire 'debugger'

デバッガーに必要なライブラリを特定するには、次のコマンドを使用できます。

 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
于 2013-04-17T20:04:39.083 に答える