問題タブ [byebug]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
61 参照

ruby-on-rails - stdin と stdout をリダイレクトして、webrick によって生成された子 ruby​​ cgi プロセスをデバッグします。

問題: byebug または pry の出力が、コンソールではなく HTTP 経由で返されます。

dispatch.fcgiスクリプトが渡された CGIHandler がマウントされたwebrick.rbスクリプトがあります。

server.mount("/", WEBrick::HTTPServlet::CGIHandler, File.expand_path(File.dirname( FILE ))+"/dispatch.fcgi")

したがって、webrick は各 HTTP リクエストを _do_GET_ メソッドを介してこのスクリプトに渡します。

このメソッドは、次のコード スニペットに従って、IO::popen を使用してサブプロセスを生成します。

/usr/local/rvm/rubies/ruby-2.2.10/lib/ruby/2.2.0/webrick/httpservlet /cgihandler.rb

ソース コード ファイルでbyebugまたはbinding.pryを使用すると、それらのstdoutが親プロセスに返され、最終的にdispatch.fcgiスクリプトによって返され、HTTP 経由で返されます。明らかに、私はそれとやり取りできないので、これは役に立ちません。

これを修正するには、stdout と stdin ではなく別の IO ストリームを使用するか、何らかの方法で /dev/pts の下の別のファイル記述子にリダイレクトするのではなく byebug を使用することを考えています。次に、代わりにこれらのファイル記述子/IO ストリームと対話する小さな console.rb スクリプトを作成し、この方法で byebug または pry と対話することができます。

Ruby、byebug/pry、webrick は初めてで、私の考えは複雑に聞こえます。これを実現する方法がよくわかりません (たとえば、OS で新しいファイル記述子を作成する方法など)。byebug/pry gem をハックして OS をいじるよりも簡単な方法があるに違いありません。CGI をデバッグするためのリソースは非常に限られています。

0 投票する
1 に答える
778 参照

byebug - 「byebug」の next と step の違い

「byebug」の「ステップ」と「次」の違いは何ですか。いつ一方を他方よりも使用する必要がありますか?

0 投票する
1 に答える
162 参照

ruby-on-rails - テストモードで byebug を使用した ActiveRecord からの SQL ログがない

Rails 6 の ActiveRecord を使用した Byebug は、テスト環境で期待どおりにログを記録しません。

テストを実行し、byebug を使用して実行を一時停止すると、ActiveRecord はクエリをコンソールに記録しません。たとえば、次のように入力するCandidate.secondと、SQL 出力が表示されません。

Candidate.second を実行しても出力が表示されない

Rails コンソール内の開発環境で同じクエリを実行すると、何が表示されますか?

ここに画像の説明を入力

ActiveRecord と ByeBug の両方のドキュメントを調べましたが、これを解決できないようです。どんな助けでも大歓迎です!

再現する手順

デバッガー ステートメントをコントローラーにスローし、テストを実行します。

byebug を使用すると、ActiveRecord がクエリをコンソールに記録しません。たとえば、コントローラー アクションにヒットするテストを実行する場合:

ターミナルから:

rails test test/controllers/jobs_controller.rb