web-dev-qa-db-ja.com

メソッドのブレークポイントによりデバッグが大幅に遅くなる

メソッド宣言の行にブレークポイントを追加すると(Intellij IDEA or Android Studio))、ポップアップが表示されます:

メソッドのブレークポイントによりデバッグが大幅に遅くなる

なぜ劇的にデバッグが遅くなるのですか、私の質問ですか?関数の最初の行にブレークポイントを置くことの何が違うのですか?

ありがとう!

26
Jeeter

私は少し見回して、この投稿を Intellij Documetation で見ました:

メソッドブレークポイント

メソッドブレークポイントは、プログラムが特定のメソッドに出入りすることに応答して機能します。行番号ではなく、調査したい方法でデバッグセッションをターゲットにできます。メソッドブレークポイントを使用すると、プログラムレベルでメソッドレベルをたどることができ、エントリの条件と終了条件を確認できます。メソッドブレークポイントを使用すると、デバッグしているアプリケーションの速度が低下する可能性があることに注意してください。

メソッドに入る直前にプログラムを停止するので、メソッドに入る前にパラメータなどを評価できます。

それが劇的に遅くなる理由は、(これは私が収集できるものです、それはallIntellijのドキュメントのメソッドブレークポイントで見つけることができるためです)に:

メソッドレベルでプログラムフローをたどり、開始条件と終了条件を確認できます。

プログラムの実行を停止するだけではかなり時間がかかると思います

8
Jeeter

IntelliJチームからの簡単な説明があります。「メソッドブレークポイントは、JVMの設計のためにデバッガーの速度を大幅に低下させます。これらの評価にはコストがかかります。」

https://intellij-support.jetbrains.com/hc/en-us/articles/206544799-Java-slow-performance-or-hangups-when-starting-debugger-and-stepping

0
Átila Braga

メソッドのエントリにブレークポイントが設定されている場合、コードを(JITを使用してプリコンパイルする代わりに)解釈的に実行する必要があると私は理解しています。

代わりにメソッドの最初の行にブレークポイントを設定する場合、コードへの行番号インデックスを使用して、ブレークオペコードを元のオペコードに単純に交換できるため、アプリが全速で実行されると思われます。 (デバッグするときはまだかなり遅いようです;)

0
Taryn