楽落人の備忘録

楽して生きていきたい。知識とか覚えておきたくない。

EclipseデバッグでのIOExceptionの発生方法

catch句の検証がしたくてデバッグでthrowを利用してIOExceptionを発生させる。

だが意図したExceptionのthrowがうまくできずthrowの仕方を改めて調べてみた。

 

■よくある・見る方法

Eclipseで適当なところにブレークポイントを張る

デバッグ起動でブレークポイントで停止

・停止後に右クリック表示

・表示された箇所にデバッグコード「throw new Exceptino();」などを書き、書いたコードを選択し実行または[ctrl+U]でデバッグコードを実行

 でdebugしてテストする・・・

 

■問題点

上記方法でtry~catchしているcatch句に入ろうるかを確認しようとすると書いたデバッグコードの実行で「評価に失敗しました。 理由:XXXXX」などが表示され意図したExceptionを発生させることができず、catch句の検証ができない。

私がよく見るのは「IOException を型に解決できません」 

 

■原因

「型名のスペルミス、パッケージ指定の欠落が主原因」

評価式のエラーメッセージでググっていると「eclipse デバッグ exception 型に解決できません」の予測検索ワードを先生が提示。。先生ありがとうございます。

以下のページに行き当たりました。

Javaプログラムにおけるデバッグのパターンは?:デバッグのヒント教えます(1) - @IT

上記記事によると、パッケージが異なるクラスを利用しようとすると上記のようにエラーが発生する、とのこと。

Eclipseに頼り切りと保守運用でにわか知識で逃げてきたつけがここでこんな形で露呈するとは。。。。反省。後悔はしない!

 

■対応方法

結局のところ、IOException起こしたいけどクラス違うから「パッケージどこさ!?」でJAVAちゃんが起こってる。

のでパッケージで指定するか。

記載するデバッグコードを

「throw new IOException();」から

「throw new java.io.IOException();」に変更して実行。

 

うまくいきましたよ先生。。涙笑。ありがとう先生。

 

ちなみにパッケージのパスはインポートするパスと一緒なので「IOException import」とかで調べて

IOException (Java Platform SE 8)

あたりで確認してパッケージパスを記載すればよいのです。

 

※補足

インポートしてあれば問題なく使えるのかしら?っておもってよくよく見たらIOException自体はきちんとインポートされていた。

つまりデバッグコードのほうで利用するために何もimportされていないから型がよくわからない状態に陥っていたのかしら。。。たぶん。