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は現在動作しているようです。
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に比べて優れています。以下はその [〜#〜] readme [〜#〜] からのグラブです。
Pryは、Rubyの標準IRBシェルの強力な代替手段です。ゼロから作成され、次のような多くの高度な機能を提供します。
履歴を表示および再生する機能
IPython、Smalltalk、その他の高度なREPLから着想を得た多くの便利なコマンド
リモートセッション、完全なデバッグ機能などを提供する幅広いプラグイン。
PryはIRBの代替品以上のものになることも目指しています。 REPL駆動プログラミングをRuby言語に導入する試みです。現在、LISP向けのSLIMEなどのツールほど強力ではありませんが、それが一般的です。 Pryが向かっている方向。
Pryはかなり柔軟性があり、重要なユーザーカスタマイズを可能にするので、readlineメソッドを持つオブジェクトから読み取り、putsメソッドを持つオブジェクトに書き込むように設定できます。Pryの他の多くの側面も構成可能で、カスタムシェルの実装。
Rubyの場合:
Ruby -rdebug myscript.rbそして、
Rails:サーバーを起動
スクリプト/サーバー-デバッガ
コードにデバッガーを追加します。
Rubyで今まで使った中で最高のデバッガは、 Netbeans に組み込まれているものです。高速RubyデバッガーgemをNetbeansからインストールする必要があります(実際にどのgemであるかはわかりませんが、Netbeansでそれを行うように求められます)。 Netbeansを組み込みのJRuby 1.4からシステムのデフォルトのRubyインストールに切り替えると、はるかにうまく機能することがわかりました。注目に値するbreakpoint
gemもあり、開発の最初からRuby組み込みライブラリlogger
を使用することも役立ちます。幸運を!
IRBを使用します。これはインタラクティブなRubyシェルです。エラーが発生すると、行番号のトレースが表示されるため、コードのどの部分で問題が発生したかを確認できます。ソースをload
IRBは有用な出力を提供します-コードを入力すると、式を評価し、.inspect
を使用して戻り値を出力します。
チートシートが実行されているのがわかります
gem install cheat
cheat rdebug
これにより、rdebugを使用するための便利なコマンドが表示されます。
デフォルトで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)
うまく機能する場合は、lldb
をgdb
に置き換えます。所有されていないプロセスをデバッグするには、接頭辞にSudo
を付けます。
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)
を実行して、そこで何が起こるかを確認できます