3

pryをインストールして使ってみます。

gem "pry"    

require 'pry'
#..........
binding.pry

しかし、3つの問題があります:

  • 次の文字列(次のブレークポイントではない)に移動するか、変数の値を監視するかがわかりません。それについての情報はありません!
  • さまざまな詮索好きがたくさんあります!pry-debug、pry、pry-dbなど。どちらを使うべきですか?
  • それはそこで止まるはずです。しかし、変数の値を監視する方法や次の行に進む方法はまだわかりません(そして見つかりませんでした)。そして、それは常に数秒で以下のようなエラーを出します:
pry(#)>エラー:実行期限が切れました
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:600:in `getbyte '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:600:in `readline '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:600:in `block in readline '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:544:in `handle_read_errors '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:589:in `readline '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:369:in `retrieve_line '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:304:in `block in r '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:301:in `loop '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:301:in `r '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:271:in `re '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:251:in `rep '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:231:in `ブロック(3レベル)in repl '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:230:in `loop '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:230:in `ブロック(2レベル)in repl '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:229:in `catch '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:229:in `block in repl '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:228:in `catch '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_instance.rb:228:in `repl '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/pry_class.rb:154:in `start '
/var/lib/gems/1.9.1/gems/pry-0.9.10/lib/pry/core_extensions.rb:22:in `pry '
/home/alex/Documents/ruby/my_projects/controllers/my_controller.rb:24:in `block in '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:1265:in `call '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:1265:in `block in compile! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:835:in `[] '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:835:in `ブロック(3レベル)でルート中! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:851:in `route_eval '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:835:in `ブロック(2レベル)でルート中! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:872:in `block in process_route '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:870:in `catch '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:870:in `process_route '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:834:in `block in route! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:833:in `each '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:833:in `route! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:936:in `dispatch! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:769:in `block in call! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:921:in `block in invoke '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:921:in `catch '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:921:in `invoke '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:769:in `call! '
/home/alex/Documents/ruby/my_projects/app.rb:21:in `block in '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:1265:in `call '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:1265:in `block in compile! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:835:in `[] '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:835:in `ブロック(3レベル)でルート中! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:851:in `route_eval '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:835:in `ブロック(2レベル)でルート中! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:872:in `block in process_route '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:870:in `catch '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:870:in `process_route '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:834:in `block in route! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:833:in `each '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:833:in `route! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:936:in `dispatch! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:769:in `block in call! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:921:in `block in invoke '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:921:in `catch '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:921:in `invoke '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:769:in `call! '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:755:in `call '
/var/lib/gems/1.9.1/gems/rack-flash3-1.0.1/lib/rack/flash.rb:120:in `call '
/var/lib/gems/1.9.1/gems/rack-timeout-0.0.3/lib/rack/timeout.rb:16:in `block in call '
/usr/lib/ruby/1.9.1/timeout.rb:68:in `timeout '
/var/lib/gems/1.9.1/gems/rack-timeout-0.0.3/lib/rack/timeout.rb:16:in `call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/session/abstract/id.rb:205:in `context '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/session/abstract/id.rb:200:in `call '
/var/lib/gems/1.9.1/gems/rack-protection-1.2.0/lib/rack/protection/xss_header.rb:22:in `call '
/var/lib/gems/1.9.1/gems/rack-protection-1.2.0/lib/rack/protection/path_traversal.rb:16:in `call '
/var/lib/gems/1.9.1/gems/rack-protection-1.2.0/lib/rack/protection/json_csrf.rb:17:in `call '
/var/lib/gems/1.9.1/gems/rack-protection-1.2.0/lib/rack/protection/base.rb:47:in `call '
/var/lib/gems/1.9.1/gems/rack-protection-1.2.0/lib/rack/protection/xss_header.rb:22:in `call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/logger.rb:15:in `call '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:129:in `call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/head.rb:9:in `call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/methodoverride.rb:21:in `call '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/showexceptions.rb:21:in `call '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:99:in `call '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:1389:in `block in call '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:1471:in `synchronize '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:1389:in `call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/builder.rb:134:in `call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/urlmap.rb:64:in `block in call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/urlmap.rb:49:in `each '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/urlmap.rb:49:in `call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/lint.rb:48:in `_call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/lint.rb:36:in `call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/showexceptions.rb:24:in `call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/commonlogger.rb:20:in `call '
/var/lib/gems/1.9.1/gems/sinatra-1.3.3/lib/sinatra/base.rb:136:in `call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/chunked.rb:43:in `call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/content_length.rb:14:in `call '
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/handler/webrick.rb:59:in `service '
/usr/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service '
/usr/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run '
/usr/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread '
pry(#)>

了解しました。インストールします

gem "debugger"

ブレークポイントを追加します

debugger

何も起こりません。

ログファイルは私が探しているものではありません。Sinatraアプリケーションをデバッグしたいだけです。それ、どうやったら出来るの?

4

2 に答える 2

6

あなたのGemfileで:

gem "pry"
gem "pry-nav"

バンドルを実行します。その後、スクリプトが検出されるたびにbinding.pry、シェルが開かれます。を使用して現在の場所を確認しwhereami、を使用して次の行に移動し、を使用しnextてスクリプトの実行を続行しcontinueます。変数を検査する場合は、その名前を入力するだけです。

詳細については、 pry-navを参照してください。

于 2012-12-23T00:21:29.103 に答える
3

pry-debugger の方が優れています。Modular スタイルで sinatra アプリを実行する必要があります。

pry を使用してデバッグする方法を説明するリポジトリを github に作成しました。

ここに画像の説明を入力

リポジトリは次のとおりです: https://github.com/hlee/sinatra_debugger_example

pry-debugger と pry-nav の違い

てこデバッガ

pry-debugger のソース コードを確認すると、次のように表示されます。

# pry-debugger.gemspec
# Dependencies
gem.required_ruby_version = '>= 1.9.2'
gem.add_runtime_dependency 'pry', '>= 0.9.10'
gem.add_runtime_dependency 'debugger', '~> 1.3'
gem.add_development_dependency 'pry-remote', '~> 0.1.6'

つまり、pry-debugger は MRI 1.9.2 および 1.9.3 のみをサポートします。デバッガーに依存しているため、Pry-debugger はより高速なトレース、ブレークポイントなどをサポートします。

プライナビ

一方、pry-nav のソースは次のとおりです。

# pry-nav.gemspec
# Dependencies
gem.required_ruby_version = '>= 1.8.7'
gem.add_runtime_dependency 'pry', '~> 0.9.10'
gem.add_development_dependency 'pry-remote', '~> 0.1.6'

つまり、pry-nav はデバッガーに依存しない純粋な Ruby アプローチです。は 1.8.7 をサポートしますが、デバッガーのブレークポイントやその他の機能はサポートしません。

ブレークポイント

break SomeClass#run           # Break at the start of `SomeClass#run`.
break Foo#bar if baz?         # Break at `Foo#bar` only if `baz?`.
break app/models/user.rb:15   # Break at line 15 in user.rb.
break 14                      # Break at line 14 in the current file.

break --condition 4 x > 2     # Change condition on breakpoint #4 to 'x > 2'.
break --condition 3           # Remove the condition on breakpoint #3.

break --delete 5              # Delete breakpoint #5.
break --disable-all           # Disable all breakpoints.

break                         # List all breakpoints. (Same as `breakpoints`)
break --show 2                # Show details about breakpoint #2.

ノート

pry-nav と pry-debugger を一緒にロードすることはできません。

于 2013-05-25T21:43:48.220 に答える