- - PR -
eclipseデバッグ中に任意の例外を発生させるには
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-01-27 14:55
いつもお世話になっております。
異常系テストにおいて、eclipseのデバッグ中(ブレークポイントで停止している状態)に 任意の例外をスローさせたいのですが、みなさんはどのようにされていますでしょうか? Google検索で、以下の方法を見つけたのですが、 http://www.egroups.co.jp/message/eclipse-ml/1130 これを試してみると、表示ウィンドウに 評価に失敗しました。理由: 例外が発生しました: java.io.FileNotFoundException と表示されるのみで、デバックコード上は例外のcatch句内に飛ばず正常に終了してしまいます。 どなたかご存知の方おられましたらご教授願えませんでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2004-01-27 15:20
評価したことで例外が発生する(させている)のですから、正しい挙動だと思います。 catch 節の方を見直されては? | ||||
|
投稿日時: 2004-01-27 15:55
Keisukeさん回答ありがとうございます。
やりたいことがうまく説明できず、十分に伝わらず申し訳ありません。 例えば、下記のようなプログラムにおいて、InterruptedException発生時のテスト (「//例外処理」で行われるのテスト)をする場合、aaa()呼び出しの部分に ブレークポイントを設定し、eclipseデバッガ上で強制的にInterruptedException をスローしたいと思っております。 public class Ttt { public static void main(String[] args) { try { aaa(); } catch (InterruptedException e) { // <例外処理> System.out.println("異常終了"); return; } System.out.println("正常終了"); } private static void aaa() throws InterruptedException { Thread.sleep(1000); } } http://www.egroups.co.jp/message/eclipse-ml/1130 では表示ペインにおいてInterruptedExceptionをスローするクラスを呼ぶことで catch句の中に処理がくると書いてあるのですが、実際やってみたところ 表示ペイン上に 評価に失敗しました。理由: 例外が発生しました: (スローさせた例外) と表示されるのみで、デバック中のコード上はcatch句の中に処理がいかず 例外処理のデバックを行うことができませんでした。 上記方法以外にデバッグ中に任意の例外をスローさせる方法があればと思い 投稿させていただきました。 ちなみに環境は、 eclipse2.1.1 OS:Windows2000Pro JDK:1.3.1 です。 よろしくお願いします。 | ||||
|
投稿日時: 2004-01-27 16:58
失礼しました。よく見たらうまく行っていませんでした。
やりたい事は理解しております。 コンソールにスタックトレースが出たので、意図どおり動いたものと 勘違いしていました。 Display ペーンで色々試してもサスペンド状態から抜け出すことは 無いようなので、無理な気がします。 またブレークポイントの評価式に細工してみましたがだめなようです。 ちょっと手間ですが、 ・ブレークポイントで止ったあと下記のようなコードを挿入。 ・Display ペーンにて、debug = true; を実行。 ・レジューム とすることで単発の例外を発行することはできました。
| ||||
|
投稿日時: 2004-01-27 17:18
Keisukeさん返信ありがとうございます。
Keisukeさんのやられた方法はアプリケーションソースコードを boolean debug = false; if (debug) { Debug.throwException(new Exception()); } のように実装し、デバッガで変数値を強制的にtrueにすると言うことでしょうか? できればアプリケーションソースコードにデバックコードは埋め込むのは避けたい のですが、eclipseデバッガで追おうする場合そうするしかなさそうですね。 「デバック中に任意の例外を発生」機能はあると便利だと思うのですが、意外に できないもんなんですね。。。(できるIDEはあるのかな?) eclipse使用者に限らず、Javaで開発をされている方々はどのようにテスト されているのか興味深いです。 とりあえず今から昔使っていたForte4jを久しぶりに起動し、上記デバッグが できるか試してみます。 ありがとうございました。 | ||||
|
投稿日時: 2004-01-27 17:18
Keisukeさん返信ありがとうございます。
Keisukeさんのやられた方法はアプリケーションソースコードを boolean debug = false; if (debug) { Debug.throwException(new Exception()); } のように実装し、デバッガで変数値を強制的にtrueにすると言うことでしょうか? できればアプリケーションソースコードにデバックコードは埋め込むのは避けたい のですが、eclipseデバッガで追おうする場合そうするしかなさそうですね。 「デバック中に任意の例外を発生」機能はあると便利だと思うのですが、意外に できないもんなんですね。。。(できるIDEはあるのかな?) eclipse使用者に限らず、Javaで開発をされている方々はどのようにテスト されているのか興味深いです。 とりあえず今から昔使っていたForte4jを久しぶりに起動し、上記デバッグが できるか試してみます。 ありがとうございました。 | ||||
|
投稿日時: 2004-12-10 10:59
随分昔のネタなので、もうどうでもよいかもしれませんが、私が実施した方法を以下に書きます。
方法 例外発生のオブジェクトのメソッドが実行される前の場所にブレークを仕掛け、 対象オブジェクトの参照を、例外スローする擬似オブジェクトに張り替える。 対象メソッドが実行されたときは、擬似オブジェクトのメソッドが 例外をスローするので、catch文節に入る。 補足 オブジェクト参照を擬似オブジェクト参照に切り換える場合は、 表示ビューで、参照代入式を書けばよい。 例外catch後、本物オブジェクトに参照を戻す必要がある場合は、 擬似オブジェクトに憶えさせておくなどする。 弱点 ・インスタンスが参照変数で参照されていないとダメ。 ・擬似オブジェクトに関するコードが存在しないとだめ。 方法としては例外スローメソッドの発想ほど簡単ではないですが、 元ソースコードをいじらずにデバッグ操作だけで例外を発生させられます。 | ||||
|
投稿日時: 2004-12-10 11:00
随分昔のネタなので、もうどうでもよいかもしれませんが、私が実施した方法を以下に書きます。
方法 例外発生のオブジェクトのメソッドが実行される前の場所にブレークを仕掛け、 対象オブジェクトの参照を、例外スローする擬似オブジェクトに張り替える。 対象メソッドが実行されたときは、擬似オブジェクトのメソッドが 例外をスローするので、catch文節に入る。 補足 オブジェクト参照を擬似オブジェクト参照に切り換える場合は、 表示ビューで、参照代入式を直接書けばよい。 例外catch後、本物オブジェクトに参照を戻す必要がある場合は、 擬似オブジェクトに憶えさせておくなどする。 弱点 ・インスタンスが参照変数で参照されていないとダメ。 ・擬似オブジェクトに関するコードが存在しないとだめ。 方法としては例外スローメソッドの発想ほど簡単ではないですが、 元ソースコードをいじらずにデバッグ操作だけで例外を発生させられます。 |
1