私の問題は実際の実践から来ています。外部(ネットワーク)サービスに依存するアプリケーションがあります。一部のサービスにアクセスできなくなると、アプリケーションがフリーズし、問題の原因がわかりません。
私は自分でアプリケーションを作成せず、問題が発生した場合にソースコードでロギングを使用しません。
jconsoleを実行すると、トレースを含むすべてのスレッドが表示されます(Windowsネイティブアプリケーションの以前のジョブでprocexpを使用してこれを行うように)。しかし、120のスレッドがあります!!
そこで、トレース内のいくつかのクラス(またはパッケージ/クラスの正規表現パターン)でスレッドを見つけて、そのトレースを出力したいと思います。だから私はネットワーク待機が行われる場所を見つけます。
jconsoleアプリケーションは、これが理論的に可能であることを示しました(ただし、パッケージを目で検索するjconsoleインターフェイスの120スレッドすべてをクリックしたくありません)。
完全なデバッガーjdbを実行する必要がありますか?そのような情報を取得できるようにするために、アプリ(実際にはJBossアプリケーションサーバーのSpringアプリケーション)を起動する必要がありますか?
私は古いライブEmacsユーザーなので、コマンドラインユーティリティでローカルに実行されているアプリケーションの痕跡を含むすべてのスレッドをダンプすることでも問題は解決します。
これは不要のように思われるので、通常(デバッグ調整なしで)実行中のアプリケーションへの接続を好みます。