7

私は、JPDA を使用して Eclipse でアプリケーションをデバッグすることに多くの時間を費やしています。Eclipse デバッガーには、私を本当に悩ませている問題がいくつかあります。プラグイン、より優れたデバッガー、または私がまだ知らないトリックをお勧めできますか?

  • 「変数」タブでは、Java コードの一部を入力して実行できます。ただし、最初に何かをクリックする必要があります (私は通常 "this" をクリックします)。次に、何かをデバッグして「実行」するために長い Java 式を入力した後、式は結果に置き換えられるため、もう一度入力する必要があります。コンソールや不足している何かなど、より良い方法はありますか?
  • データ構造を調べているとき、デバッガーでのプレゼンテーションには多くの要望が残されています。Lists、Maps、StringBuilders などの内部表現が表示されます。私が見たいのは、これらのオブジェクトが概念的に含むものです。おそらく他のデバッガーや拡張機能などを使用して、これを行う方法はありますか?
  • 例外がスローされたときに、例外がスローされたアプリケーションの状態を検査する方法はありますか? 現在、例外が発生する直前にブレークポイントを設定し、それを再現する必要があります。
  • 多くのステートメントが含まれる行をまたいでいるとき、どのステートメントが実行されているかを実際に確認することはできません。
  • ソース コードが見つからない場合、Eclipse はぼんやりとあなたを見つめるだけです。「Class File Editor / Source code not found」という役立つ画面が表示されますが、これはまったく役に立ちません。少なくとも何が起こっているのかを確認できるように、バイトコードをステップスルーできるようにしたいと思っています。Eclipse よりも優れた Java デバッガーを知っている人はいますか?
4

8 に答える 8

11

私はしばらくの間 Eclipse デバッガーを使用しており、いくつかの懸念を共有しています。ただし、言及したポイントのいくつかは、Eclipse デバッガーで解決/対処されています。

データ構造: 変数ビューには、リスト/セット/配列などの「論理構造」を表示するオプションが既にあります。このビューの左上隅に、これを有効にするボタンがあります。Java->Debug->Logical Structures プリファレンスを使用して、独自のカスタム表現を追加することもできます。

例外: デバッガーでは、例外ブレークポイントを設定できます (ブレークポイント ビューの [Java 例外ブレークポイントの追加] ボタン)。これらのブレークポイントは、特定の例外がスローされたときにトリガーされます。

ソース コード: バイトコードのビューアーを備えたプラグイン (例: asm バイト コード プラグインhttp://asm.ow2.org/eclipse/index.html ) をインストールすると、ソース コードが見つからない場合、デバッガーはバイトコードをステップ実行します。 .

于 2010-12-22T21:27:09.727 に答える
4

Vilas Jagannath の言うことの多くに同意します。

Eclipse デバッガーの使用 追加のポイント:

1) 表示ビュー。このビューでは、現在のスタック フレームのコンテキストでコードを実行できます。これにより、コードの任意のビットを検査できます。ある意味では少し原始的ですが、スクラッチ パッドとしてはうまく機能します。

4) 複雑な式を含む行でメソッド呼び出しに移動する場合は、その関数に移動してから「行まで実行」(Ctrl + R) できます。

5) ステップ フィルターを使用して、気にしないクラスをフィルター処理することもできます。気にしないスタック フレームを右クリックし、[フィルター タイプ] をクリックします。「ステップフィルターを使用」がオンになっていることを確認してください。これは、[デバッグ] ビューの [フレームにドロップ] ボタンのすぐ右にある 2 つの矢印の付いたアイコンです。

于 2010-12-22T21:39:25.080 に答える
3

これが私の答えです - 箇条書きはあなたの質問の箇条書きと同じ順序です:

  • それを行うより良い方法があります:
    1. 表示ビューを使用してステートメントを実行します。
    2. クラス自体に何かを書き、それを「検査」します(ctrl + shift + I)
  • 変数ビューで「論理構造を表示」という小さなアイコンを確認します。それはあなたが探しているものかもしれません。
  • Exception に一般的なブレークポイントを設定して、発生した例外をキャッチすることができます - 例外ビューで J! アイコン。
  • ステップインしたいメソッドでctrl + alt +マウスの左クリックを使用すると、魅力のように機能します!
  • キーまたはボタンでステップを使用することもできます (スタックを参照してください)。コードを見たい場合は、逆コンパイラを使用してください。

まだ改善すべき点があると思いますが、これらのヒントが少し役立つかもしれません。

于 2010-12-23T04:29:38.023 に答える
3

NetBeans とそのデバッガを使用しています。

3番目のポイント(例外)について:例外がスローされた時点で状態を確認する方法は他にないと思います。例外がメソッドからスローされると、そのメソッドのスタック フレームは破棄されます。後で調べることができないように失われます。

また、私の知る限り、NetBeans デバッガーではバイトコードをステップ実行できません。

于 2010-12-22T21:22:05.247 に答える
1

多くのステートメントが含まれる行をまたいでいるとき、どのステートメントが実行されているかを実際に確認することはできません。

ステップインしたい機能を選択し、「選択範囲にステップイン」を使用します (私は Ctrl-F5 を使用していますが、コンテキスト メニューで見つけることができます)。

于 2010-12-27T07:46:32.263 に答える
1

通常、eclipse は私の好みの IDE である IntelliJ (無料版) よりも優れたデバッガーを備えていると思います。最初の 4 つについては、IntelliJ の方が例外のブレークポイントを備えている可能性があります (これにより、例外がスローされた時点での状態を確認できます)。 、オブジェクト タイプのカスタム レンダラー、および永続的な式 (つまり、コンテキストを変更するたびに式が再評価されます)

バイトコードをステップスルーするデバッガーは知りません。

于 2010-12-22T21:23:23.253 に答える
0

GUI デバッガーとは異なるものとして、JVM の Java Debugger Interface のスクリプトを作成できるjdiscriptというプロジェクトがあります。スレッド競合のトラブルシューティングや、実稼働負荷の下で散発的にしか発生しないように見える問題を見つけるのに特に役立つことがわかりました。

于 2014-04-13T18:43:38.973 に答える
0

別の方法として、コードに log.debug と System.out.println を散らかしておくこともできます。つまり、やりたいことが何でもできるということです。

于 2010-12-28T19:11:52.090 に答える