10

Java アプリケーションでサードパーティのライブラリを使用しています。このサード パーティ ライブラリは、アプリケーションの起動ごとにキャッチされないカスタム例外をスローします。例外は無害であり、サード パーティのライブラリに内部的にログを記録する目的でのみ使用されます。この例外はキャッチされないため、アプリケーションを起動するたびに Eclipse IDE がデバッグ パースペクティブに切り替わり、スレッドの実行が中断されて問題が通知されます。これを無視して毎回デバッグを再開するように Eclipse に手動で指示する必要があります。これは非常に面倒です。この問題を解決するためにサード パーティのライブラリを変更することはできません。

特定の種類のキャッチされていない例外を無視するように Eclipse IDE に指示する方法はありますか?

「ステップ フィルタリング」を試してみましたが、キャッチされないカスタム例外がスタック トレースにないため、デバッガーから除外されていません。これはステップ フィルタリングへの私の最初の進出なので、間違った使い方をしている可能性があります。スタック トレースの例を次に示します。

Daemon Thread [Thread-13] (Suspended (exception CustomThirdPartyException)) 
    ThreadPoolExecutor$Worker.run() line: not available [local variables unavailable]   
    Thread.run() line: not available

編集:

Eclipse でキャッチされていない例外をすべて無効にした後、独自のロガーを使用してキャッチされていない例外を監視する jluzwick の回避策は技術的には機能しますが、理想的ではなく、ロガーが壊れていると見逃す可能性があります。

mazaneicha のソリューションは正しい方向に進んでいるように見えましたが、思い通りに動作させることができませんでした。これは、私の側のユーザー エラーが原因である可能性があります。

jluzwick と mazaneicha の両方がこの問題を回避できる可能性がありましたが、Konstantin Komissarchik は、ライブラリの作成者に修正をプッシュする必要があるという「正しい」答えを持っていました。技術的な解決策が適切でない場合もあります。

4

6 に答える 6

13

古いスレッドですが、少し追加することにしました。

少なくとも Eclipse Indigo: [Debug Perspective] -> [Breakpoints] ビューで:

  1. 一時停止する例外 (および場合によってはサブクラス) のブレークポイントを指定します。これは、[Java 例外ブレークポイントの追加] をクリックして行います。J と感嘆符のアイコン。
  2. ブレークポイントを右クリックし、[ブレークポイントのプロパティ] を選択します。
  3. 「フィルタリング」へ
  4. 無視するクラスまたはパッケージを指定します。これにより、それらがリストに追加されます。必ずチェックを外して、排他的であることを示してください (指定された場所で停止しないでください)。

NullPointerExceptions を一般的な例外ブレークポイントとして指定できるようにするためにこれを使用する傾向がありますが、サードパーティ ライブラリからのパッケージは無視します。

于 2011-09-02T11:38:39.937 に答える
2

代わりにコードでこれを解決することをお勧めします。このライブラリを初期化しているコード内の場所を見つけて、「通常の」動作とは見なされないスタックに伝播させる代わりに、この例外をキャッチします。

于 2011-03-01T18:48:30.927 に答える
1

Debug パースペクティブの Breakpoints ビューで、Java Exception Breakpoints (小文字の J と感嘆符 J! の付いたアイコン) をクリックします。表示される Add Java Exception Breakpoint ウィンドウで、迷惑な例外を見つけて、[Suspend on Uncaught Exception] ボックスのチェックを外すことができます。

于 2011-03-01T19:19:46.420 に答える
1

これを試しましたか?

[ウィンドウ] -> [設定] -> [Java] -> [デバッグ] に移動します

「実行の一時停止」の下で、「キャッチされていない例外で実行を一時停止する」のチェックを外します

特定の例外を無効にする方法があるかどうかはわかりませんが、間違っている可能性があります。それを行うプラグインがあるかもしれません。

于 2011-03-01T19:00:34.317 に答える
0

シンプルな try 、 catch が必要なようですね。

 MyException e = new MyException;
 try {
       throw new e;
 } catch (MyException e) {
       e.printStackTrace();
 } 

これにより、例外をスローできますが、無視してプログラムを続行できます。ファイルに記録する場合は、'PrintWriter.println(e.printStackTrace());' を使用します。

必要なものが手に入ったことを願っています。満足のいくコーディングをしてください!

于 2013-05-18T19:02:22.937 に答える