web-dev-qa-db-ja.com

デバッグ方法Rubyコード?

Ubuntu 10.10を実行しています。単純なスクリプトをデバッグしたいだけです。どうやってそれができるのかを理解しようと半日過ごした後、私はあきらめました。一体何をすべきか?

インストール済みRuby-dev Ubuntuリポジトリから
私は走ったSudo gem install Ruby-debugおよびSudo gem install Ruby-debug-ide

これを機能させるためにいくつかの方法を試しました。私は試した require 'Ruby-debug'そして、コードのどこかにdebuggerを設定します。しかしRubyは見つかりませんRuby-debug
セットアップを試みましたvim-Ruby-debugger、実行に年齢かかります:Rdebugger myScript.rbとブレークポイントを設定できますが、そのデバッガーを使用してコードを実行する方法がないようです。
そして、プロジェクトをセットアップして何かをクリックするたびにクラッシュするNetBeansを使用しようとしました。

したがって、親愛なるコミュニティー:Rubyをデバッグする方法がなければなりません。 Railsではありません。派手なものは何もありません。ほんの一部のCLIスクリプト。私を助けてください、さもなければ私は私の正気の残りを失います。

編集: gem exec dirがパスにありませんでした。したがって、少なくともrdebugは現在動作しているようです。

28
bastibe

Ruby-debugは1.8以降用で、Ruby-debug19は1.9以降用です。

Ruby-debugは簡単に習得でき、非常に便利です。特定の条件が存在するまで実行するようにアプリケーションに指示し、それからそれを解除して、nil値または散発的に発生する他の条件を簡単に見つけることができます。

コマンドラインからrdebug appnameを使用すると、デバッガーのプロンプトが表示されます。 100行目まで実行して停止したい場合は、c 100と入力すると、デバッガーが一時的なブレークポイントを設定し、プログラムが実行され、実行パスにある場合はそこで停止します。一旦停止すると、一時的なブレークポイントはクリアされます。常に100行目で停止したい場合は、b 100を実行してからcを実行すると、デバッガーが永続的なブレークポイントを設定し、続行して、ブレークポイントに達したときに停止します。ブレークポイントをクリアしたり、特定の条件が適用されたときに発生する条件付きのものを設定したりできます。nを入力して、サブルーチン呼び出しをスキップして次の命令にステップするか、sを入力してステップインできます。変数の内容をさまざまな方法で表示するコマンドがあるので、ドキュメントに目を通してください。

Rdebugの内部から、変数が既に入力されているIRBシェルにドロップできるので、物事をつついて何が起こるかを確認できます。内部から値を検査または設定して、what-if調整を支援できます。 rdebug内からこれを行うと、変更された値でプログラムを続行し、その動作を確認できます。

IRBはその場所にあり、試してみるのに最適ですが、デバッガーがIRBのようなことを行うことができるのと同じように、デバッガーの代わりにはなりませんが、置き換えられません。どちらのツールも優れた組み合わせであり、印刷ステートメントに依存したり、ログファイルにダンプしたりする必要はありません。


Pry はIRBと debugger の素晴らしい組み合わせとして浮上しており、調査する価値があります。

20
the Tin Man

pry はIRBに比べて優れています。以下はその [〜#〜] readme [〜#〜] からのグラブです。

Pryは、Rubyの標準IRBシェルの強力な代替手段です。ゼロから作成され、次のような多くの高度な機能を提供します。

  • ソースコードの閲覧(pry-doc gemを含むコアCソースを含む)
  • ドキュメントの閲覧
  • ライブヘルプシステム
  • エディターでメソッドを開く(edit-method Class#method)
  • 構文の強調表示
  • コマンドシェルの統合(エディターの起動、gitの実行、Pry内からのrake)
  • 要旨の統合
  • 状態の周りのナビゲーション(CD、LS、および友達)
  • ランタイム呼び出し(Pryを開発者コンソールまたはデバッガーとして使用)
  • エキゾチックなオブジェクトのサポート(BasicObjectインスタンス、IClassesなど)
  • 強力で柔軟なコマンドシステム
  • 履歴を表示および再生する機能

  • IPython、Smalltalk、その他の高度なREPLから着想を得た多くの便利なコマンド

  • リモートセッション、完全なデバッグ機能などを提供する幅広いプラグイン。

PryはIRBの代替品以上のものになることも目指しています。 REPL駆動プログラミングをRuby言語に導入する試みです。現在、LISP向けのSLIMEなどのツールほど強力ではありませんが、それが一般的です。 Pryが向かっている方向。

Pryはかなり柔軟性があり、重要なユーザーカスタマイズを可能にするので、readlineメソッドを持つオブジェクトから読み取り、putsメソッドを持つオブジェクトに書き込むように設定できます。Pryの他の多くの側面も構成可能で、カスタムシェルの実装。

12
frankl
  1. Rubyの場合:

    Ruby -rdebug myscript.rbそして、

    • b:ブレークポイントを置く
    • およびn(ext)またはs(tep)およびc(ontinue)
    • 表示用のp(uts)
  2. Rails:サーバーを起動

    • スクリプト/サーバー-デバッガ

      コードにデバッガーを追加します。

6
Jeet

Rubyで今まで使った中で最高のデバッガは、 Netbeans に組み込まれているものです。高速RubyデバッガーgemをNetbeansからインストールする必要があります(実際にどのgemであるかはわかりませんが、Netbeansでそれを行うように求められます)。 Netbeansを組み込みのJRuby 1.4からシステムのデフォルトのRubyインストールに切り替えると、はるかにうまく機能することがわかりました。注目に値するbreakpoint gemもあり、開発の最初からRuby組み込みライブラリloggerを使用することも役立ちます。幸運を!

4
David Hollman

IRBを使用します。これはインタラクティブなRubyシェルです。エラーが発生すると、行番号のトレースが表示されるため、コードのどの部分で問題が発生したかを確認できます。ソースをload IRBは有用な出力を提供します-コードを入力すると、式を評価し、.inspectを使用して戻り値を出力します。

2
david4dev

チートシートが実行されているのがわかります

  gem install cheat
  cheat rdebug

これにより、rdebugを使用するための便利なコマンドが表示されます。

1
Ale

デフォルトでRuby Debuggerを次のいずれかで試してください:

Ruby -r debug filename[, ...] 

または、CLIスクリプトの場合は、最初の行を次のように変更します。

#!/usr/bin/env Ruby

に:

#!/usr/bin/env Ruby -rdebug

スクリプトは例外ごとに停止します。

または、次のスクリプトサンプルを確認してください。

#!/usr/bin/env Ruby
class Hello
   def initialize( hello )
      @hello = hello
   end
   def hello
      @hello
   end
end

salute = Hello.new( "Hello, Mac!" )
puts salute.hello

以下のようにデバッグできます。

# Ruby -r debug hello.rb
Debug.rb
Emacs support available.

hello.rb:3:class Hello
(rdb:1) v l
  salute => nil
(rdb:1) b 10
Set breakpoint 1 at hello.rb:10
(rdb:1) c
Hello, Mac!

ソース: Ruby Debugger


または、lldb/gdbを使用します。スクリプトのバックトレースをフォアグラウンドに出力する簡単な例を以下に示します。

echo 'call (void)rb_backtrace()' | lldb -p $(pgrep -nf Ruby)

うまく機能する場合は、lldbgdbに置き換えます。所有されていないプロセスをデバッグするには、接頭辞にSudoを付けます。

1
kenorb

Rubyのデバッグには困難な歴史があり、MRIの特定のマイナーバージョンのみをサポートするツールが散らばっています。ありがたいことに、2.0以降では byebug を使用できます。

コマンドラインの使い方は簡単です:byebug <your script>を実行します。また、ファイルを編集して、デバッグを開始したい場所にbyebug関数呼び出しをドロップすることもできます。

Ruby)用のコンソールベースのデバッガーはたくさんあり、選択に基づいてさまざまな機能を備えています。

あなたが重要な必要がある場合-直感的なナビゲーション(たとえば、次に行ごとに移動し、ブロックにステップインする)と迅速で包括的なドキュメント-これは私にとって最もうまくいきます:

https://github.com/garmoshka-mo/pry-moves


私が要求した他のクールな機能-デバッガーの内部からデバッグすることです。私がコントローラーのアクションで停止した場合のように:

_def index
    list = Orders.for_user(current_user) 
=>  binding.pry
end
_

listが空である理由を知りたいのですが? -debug Orders.for_user(current_user)を実行して、そこで何が起こるかを確認できます

0