Javaプログラムがデバッグモードで実行されているかどうかを確認するにはどうすればよいですか?
通常の「フルスピード」モードと「デバッグモード」では、アプリケーションの動作が少し異なるはずです(デバッガーが接続されている場合、デバッグモードで実行している場合)。アプリケーションは、TCPを介して別のコンピューター、別のプロセス、またはそれ自体と通信します。同僚がSocket.setSoTimeout(1000)
デフォルトで使用することを望んでいるため、ソケットからの読み取りは最大で1秒間ブロックされます。もちろん、デバッグ時にはこれだけでは不十分であり、アプリケーションは正常に機能しなくなります。したがって、解決策はSO_TIMEOUT
より高い値を設定することですが、デバッグモードでのみです(たとえば、無制限)。現在、常にブレークポイントを設定したり、「デバッグ」プロパティを自分で設定できるデバッグビルドを使用したりしません。ときどきデバッガー(リモートデバッグ)をアタッチします。私は主にEclipseを使用しているので、そこで機能するソリューションで問題ありません。
考えられる答えは次のとおりです。
デバッグモードで実行されているかどうかを確認するには、java.lang.management.*
またはで次のメソッドを使用しますjavax.management.*
...
理由Xのために同僚が間違っSO_TIMEOUT
ています。デフォルトでは1秒に設定しないでください。
システムプロパティアプローチについては知っていますが、元の質問を解決するために質問を開いたままにしておきます。
私は今それを見つけました:
boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean().
getInputArguments().toString().indexOf("jdwp") >= 0;
これにより、Java Debug Wire Protocolエージェントが使用されているかどうかが確認されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加