2011-12-17 17 views
30

ゴーストの方法ルビーの宝石の中にたくさんありますので、私はルビーの宝石の内部メカニズムをちょうど勉強するのは良い考えではないと思いますそのソースコードを静的に読む。実行中のルビープロセスに第三者の宝石のソースファイルを添付してデバッグする方法がありますので、ブレークポイントを設定したり、物事がどのように動的に動作するかを見ることができます。
私はRubyMineの3番目の宝石のソースファイルに移動しようとしましたが、 'require'ステートメントの文脈メニュー「Go To-> Implementations」または3番目宝石の他のシンボル(例えば、require 'watir')、成功することはありません。 Rubyのようなダイナミックな型指定言語のIDEがシンボルナビゲーションに失敗するのは普通ですか?ルビーのサードパーティ製の宝石をデバッグする最良の方法

答えて

37

私はこれを行うには良い方法があるかどうかを知るのが大好きだが、それがどのように私は通常の操作を行います。

  1. があなたのGemfileにルビー・デバッグ宝石を追加(またはあなたがならルビーdebug19 Ruby 1.9.2について)
  2. bundle show gemnameを実行してGemを検索します。私はMac上にあるので、通常これをpbcopyにパイプしてクリップボードにコピーします。 bundle show rails | pbcopy
  3. お気に入りのエディタでgemディレクトリを開きます。 mvim /path/to/gem/directory
  4. ブレークポイント*を挿入するファイルと行に移動し、問題の行の上にdebuggerを挿入します。
  5. リロードページ、実行するテスト、または実行がデバッガで停止した場合、あなたは変数(p variable_name)を検査し、ruby debugger commandsと行ずつ移動することができます
  6. 実行するために宝石のファイルを取得するために何でもあなたが希望ください。ブレークポイントを置くことを知っ

*コードのいくつかの理解を取ることができますが、現在受け入れ答えで提案されているように、私は宝石のファイルを編集回避するのlib/gemname.rb

+3

ありがとう:私はので、ここでgemsetrvmが、私はそれを行う方法であるを使用しています。これは素晴らしいです。 FWIW、私は[Pry](https:// ruby​​gems。org/gems/pry)の代わりにruby-debugを使用しました。 –

+1

同じマシン上の他のアプリケーションが同じGemを使用している場合は、これが中断されますか? – flyingL123

+0

@ flyingL123、彼らはあなたのアプリとしてデバッグモードで実行されている場合は、他の人を中断すると思います。 – parzival

0

、実行時にコードを変更する言語では、Rubyのような、ハードで正確にシンボルの起源を100%を予測する、方法など

私は、ソースコードの解析を必要とするサードパーティ製の宝石の多くに対処し、私はこの仕事のための最良のツールがNetbeas + RubyとRailsのプラグインだと分かった。

  • は、実際には、いくつかの不具合を持って

**(トレースとすべてで)仕事(他の選択肢とは違って)依存宝石のソースコードでは良いナビゲーション

  • 視覚的なブレークポイントとデバッグが可能({}のような)コードブロックでメソッドを呼び出すが、それらを処理する方法を学んだ

    私が通常行っていることは、実行時にブレークポイントを設定してコードを分析することです。

  • 9

    に開始する必要があります。代わりに、debuggerコマンドをアプリケーションファイルの1つに入れて、breakコマンドを使用して宝石にブレークポイントを設定します。

    break /Users/chris/.rvm/gems/[email protected]<gemset>/gems/<gem_name>-<gem-version>/<path_to_file>:<line_number>

    +0

    同じGemを使用している場合、受け入れられた回答は同じマシンの他のアプリケーションに干渉しますか?もしそうなら、この解決策がその問題を回避するように思われる。 – flyingL123

    +2

    はい。それは全体のポイントです。あなたがオプションから外れていない限り、私はあなたがそれらをフォークするつもりがない限り、すべての費用でGemファイルを編集しないでください –

    関連する問題