- PR -

catch句内の例外処理

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-04-11 06:19
} catch { // これで、全例外をキャッチ
  rollcback 処理
  throw; // throw だけ。再投する
}


で、application.Run をしているところを try 〜 catch で囲って、そこでロギング。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-11 07:40
引用:

Jittaさんの書き込み (2006-04-11 06:19) より:

で、application.Run をしているところを try 〜 catch で囲って、そこでロギング。


これは、良くない例だと言われていたような...

それに、「Rollback で例外が発生したら」で考えた場合ロギング上の都合は変わらなくないですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-11 07:43
引用:

MGSさんの書き込み (2006-04-10 20:18) より:

ログの実装はまだなのです・・・何らかの方法でファイルに書こうとは思っているのですが。


ロギング用のコンポーネントなどは使わないのですね。

引用:

例外が発生した時点で書くのがいいのかもしれませんね。
呼び元で「一回だけメッセージを表示する」ことにこだわりすぎてました。


例外が発生したことによって派生してしまった例外だと思えばそれでも良いかもしれません。
ログに何を吐くかにも因りますけど、本来の目的で考えれば必要がないように思えます。
むしろ、スタックトレースなどの方が役に立ちそうです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まいるどきゃっと
大ベテラン
会議室デビュー日: 2004/08/12
投稿数: 135
お住まい・勤務地: 群馬
投稿日時: 2006-04-11 09:55
引用:

MGSさんの書き込み (2006-04-10 20:18) より:

ログの実装はまだなのです・・・何らかの方法でファイルに書こうとは思っているのですが。



ロギングの方式決定はなるべく早くしたほうがいいですよ。後になればなるほど追加するのが大変になりますし、ロギングコンポーネントの呼び出し方にブレが生じる原因となります。それに何よりデバッグに役立ちます。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-04-11 11:34
引用:

ぶさいくろうさんの書き込み (2006-04-10 19:27) より:
ログをどうやってるのかわかんないけど、例外が発生した時点で書けばいいんでないの?

InnerExceptionに詰め込んでお持ち帰りするのも手かもしれんけど邪道っぽい。


邪道どころか、私はこれこそ王道と思って使ってます。

ログに例外を書くためには、一回catchしなければなりません。
しかし、catchするとそこで例外が止まってしまうので、処理続行不可能なら再throwしなければなりません。
しかし、InnerExceptionを使わずに再throwすると、例外の発生元がそこに置き換わってしまう。
なので、InnerExceptionを使って再throwするのですが、もし発生した時点でログに記録すると、
一番外側のエラーハンドラで記録したログのInnerExceptionの内容とかぶってしまい、勿体無い。

てことで、私の場合InnerExceptionに詰め込んで一番外側のエラーハンドラでのみログに記録しています。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-04-11 11:45
引用:

しかし、catchするとそこで例外が止まってしまうので、処理続行不可能なら再throwしなければなりません。
しかし、InnerExceptionを使わずに再throwすると、例外の発生元がそこに置き換わってしまう。


throw e;
形式でなく
throw;
形式にすれば、例外を覗き見しているだけで、発生元は変わらないようです。
_________________
囚人のジレンマな日々
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-04-11 11:54
引用:

囚人さんの書き込み (2006-04-11 11:45) より:
throw e;
形式でなく
throw;
形式にすれば、例外を覗き見しているだけで、発生元は変わらないようです。


知らなかった orz
勉強になりました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-11 17:23
ひろれいさんがリンクしてくださったスレと同じ流れですねw

  クラス内で発生したエラーの捕らえ方

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)