2008-09-14 19 views
2

私は現在、Windows、Linux、MacOS X上でうまく動作するJavaのクロスプラットフォームアプリケーションに取り組んでいます。私は検出と処理を行ううまくやってみようとしています。 「クラッシュ」のJavaで「クラッシュ」を検出し、それに応答して何かを行う、簡単でクロスプラットフォームな方法はありますか?Javaでクラッシュログをキャプチャする方法

「クラッシュ」とは、捕捉されない例外を意味します。しかし、コードはいくつかのJNIを使​​用していますので、悪いJNIコードからクラッシュをキャッチできるのはうれしいですが、JVM固有の感覚があります。

答えて

4

単純なキャッチオール処理の場合、Threadに次の静的メソッドを使用できます。スレッドが急激キャッチされない例外に終了し、他のハンドラがさ​​れていない場合、デフォルトのハンドラが呼び出さ設定し

静的な無効setDefaultUncaughtExceptionHandlerThread.UncaughtExceptionHandler EH)
                   :Javadocのからそのスレッドに対して定義されています。

これは、他の場所では検出されないエラーまたは未チェックの例外を処理する非常に幅広い方法です。

サイドノート:コードが問題の原因に近い例外を捕捉し、ログに記録したり、復旧したりすることができれば良いです。私は完全に回復不能な状況(すなわち、サブクラス:java.lang.Error)のために、この種の一般化されたクラッシュ処理を予約します。 RuntimeExceptionが完全にキャッチされない可能性を避けるようにしてください。ソフトウェアがそれを生き延びるために可能である可能性があります。

3

キャッチされない例外を処理する場合、ThreadGroup.uncaughtException(...)の実装を提供する新しいThreadGroupを提供できます。キャッチされていない例外をキャッチし、適切に処理できます(クラッシュログの送信など)。

JNIのフロントでお手伝いできない場合は、JVMを呼び出す前にネイティブラッパーの実行可能ファイルを使用する方法がありますが、その実行可能ファイルは呼び出し可能なすべてのJVMについて知る必要があります。クラッシュを表示し、クラッシュログがどこに配置されているかなどを確認してください。

1

これが必要なのかどうかは不明ですが、ネイティブコード内で例外が発生したかどうかを検出することもできます。詳細はhttp://java.sun.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp5234を参照してください。

+0

私は、ネイティブコードからJavaコードを呼び出すので、予想外の例外/クラッシュを処理できるポイントに追加するので、それは便利です。 このようなコードを使用してクラッシュのチェックを行うコードを散布しなければならないようです。 –

関連する問題