8

私は JDB を学んでいて、少しパラドックスに陥っています。JDB を ("jdb ClassName" で) 起動した後、ほとんどのチュートリアルで入力するように指示されます。

> メソッド ClassName

ブレークポイントを設定できるように、使用可能なメソッドのリストを表示します。私がそうすると、JDBは応答します

コマンド「メソッド」は、VM が「実行」コマンドで開始されるまで有効ではありません

もちろん、ブレークポイントを設定する前に「実行」と言うと、そのまま実行されます。あまり役に立ちません。私が結論付けることができる唯一のことは、jdb はブレークポイントをブラインドに設定することを期待しているということですが、これは非常に見落としのように思えます。単にコマンドが抜けているだけだと思います。

どうもありがとう!!ジョイス

4

3 に答える 3

1

デバッグしているのが自分のプログラムなら、クラス名を知っていると思います!

ソースコードを持っていないプログラムの場合、それを実行するには、 を含むクラス名を知っている必要がありますmain()。で始まる jar 内にある場合java -jar、そのクラスの名前は jar 内のマニフェストにあります。

しかし、実際には を実行しているjdb ClassNameので、 method を実行していることがわかりますClassName.main()。右?

Web サービスのサーブレットの場合、サーブレットのクラスはweb.xml.

したがって、これらのケースのいずれにおいても、少なくとも最初のメソッドを取得できるはずです。そこに着いたら、残りを見つけることができます。

于 2010-07-17T21:17:07.193 に答える
0

まったく同じ質問がありました。

実行後:

jdb -classpath build -sourcepath src MyClass

jdb私が入力したテキストは、セッションの下に太字で示されています。

> MyClass.main で停止
ブレークポイント MyClass.main を据え置きます。
クラスがロードされた後に設定されます。
>走る
MyClass を実行する
キャッチされていない java.lang.Throwable を設定する
遅延されたキャッチされていない java.lang.Throwable を設定する
>
VM の開始: 遅延ブレークポイント MyClass.main の設定

ブレークポイント ヒット: "thread=main", MyClass.main(), line=798 bci=0
798 MyClass シングルトン = new MyClass();

メイン[1]リスト
797 public static void main(String[] args) {
798 => MyClass シングルトン = new MyClass();
799         
于 2013-10-09T15:37:39.883 に答える