トップ回答者
例外(エラー)の発生した場所

質問
回答
-
メソッドの呼び出し履歴が、例外オブジェクトの StackTrace プロパティに格納されています。
例えば Hoge.A メソッドの中で呼び出している Huga.B メソッドの中で呼び出している PiyoC メソッドで例外が投げられた場合、
場所 Piyo.C 場所 c:\*******\*******\Piyo.cs:行**
場所 Huga.B 場所 c:\*******\*******\Huga.cs:行**
場所 Hoge.A 場所 c:\*******\*******\Hoge.cs:行**
といった風になります。
まずスタックトレース先頭に現れているソースファイルの行を調べるのがいいでしょう。- 回答としてマーク アースワーム 2009年11月17日 4:17
すべての返信
-
メソッドの呼び出し履歴が、例外オブジェクトの StackTrace プロパティに格納されています。
例えば Hoge.A メソッドの中で呼び出している Huga.B メソッドの中で呼び出している PiyoC メソッドで例外が投げられた場合、
場所 Piyo.C 場所 c:\*******\*******\Piyo.cs:行**
場所 Huga.B 場所 c:\*******\*******\Huga.cs:行**
場所 Hoge.A 場所 c:\*******\*******\Hoge.cs:行**
といった風になります。
まずスタックトレース先頭に現れているソースファイルの行を調べるのがいいでしょう。- 回答としてマーク アースワーム 2009年11月17日 4:17
-
(ちなみに例外はできるだけtry-catch-end try するのは心得ている「つもり」です)
いえ、キャッチする必要がある物だけ、キャッチする必要があるところで、キャッチしてください。「キーパー以外がキャッチすると反則です」(by NAL-6295さん)。キーパーであっても、ペナルティエリア外でキャッチすると反則です。
.NET Framework の範囲で心得ておくべきは、「予期される例外は、実行時に発生しないようにしておく」です。
Jitta@わんくま同盟
ご返信ありがとうございます。
>.NET Framework の範囲で心得ておくべきは、「予期される例外は、実行時に発生しないようにしておく」です。
この「心得」は今後十分意識してまいりますが、本件は「予想されない例外」の場合です。 -
予想されない例外なら、キャッチする必要はありません。何を思って「(ちなみに例外はできるだけtry-catch-end try するのは心得ている「つもり」です)」と、書き足したのでしょうか?こう書き足してあるから、「至る所で必要もないのにキャッチしているのでは?」と考えたのですが。。。
ところで、予期しない例外であるということならば。StackTrace にコードの場所が出るのは、.pdb ファイルがあるときです。納品するときには .pdb ファイルは納品しないと思います。そうすると、コードの場所(ファイル名と行番号)はわかりません。Debug でも Release でも、.pdb ファイルを消してやってみて下さい(かならず通るところに「Throw New Exception("TEST")」と入れておけばいいでしょう)。それは、当初の問題をクリアしていますか?
追加
予想しない例外ならば、コードの場所よりも、「どんな状況で例外が発生したか」の方が、原因究明に役立つと思います。そのあたりは、どのようにお考えでしょうか。
Jitta@わんくま同盟