100

通常、実行中のjvmにデバッガーをアタッチするには、次のような引数を使用してjvmを開始する必要があります。

> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n

デバッグモードで開始されていないプロセスをデバッグしたい場合、どうすればよいですか?

この状況は、本番システム(つまり、デバッグ引数なしで起動された)が「ランダム」(私はこの用語を大まかに使用します)バグを示したときに発生します。したがって、バグを再現する方法が誰にもわからないため、適切な引数を使用してjvmを再起動することはできません。この状況でJVMに接続することは不可能ですか?

明確にするために、jdbなどのツールを使用して、デバッグモードで開始されない限り、すでに実行中のJVMに接続することはできません。

JVMのマニュアルページから

jdbを使用する別の方法は、すでに実行されているJavaVMに接続することです。jdbでデバッグするVMは、次のオプションで起動する必要があります。

4

5 に答える 5

50

jsadebugdJDK)を使用して、デバッグサーバーをプロセスに接続できる場合があります(WindowsではWindows用のデバッグツールを使用して利用できます)。実験的なものとしてマークされているので、最初にテストマシンで試してみることをお勧めします。

使用法:

jsadebugd <pid>
jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost

コネクタ名witheargは、を使用して見つけることができますjdb -listconnectors

于 2008-12-17T22:27:09.000 に答える
33

明確にするために、jdb のようなツールを使用して、既に実行中の JVM にアタッチすることはできません > > デバッグ モードで起動されていない限り

ソビエトロシアでは、情報源はあなたを読みます

jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=9426
于 2010-06-10T14:52:33.843 に答える
6

jstack (デッドロックの場合に便利) またはbtrace VisualVM プラグインを使用することもできます

于 2009-10-08T01:07:33.133 に答える
-5

いつでもjdbを使用して手動でデバッグできます:P

于 2008-12-17T22:29:40.790 に答える