質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

2984閲覧

C#例外が発生したのにエラーが発生せず、関数がreturn?される

ElecDove

総合スコア254

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2015/10/18 10:25

お世話になります。

XmlSerializerを使ったのですが、ソース中で誤ってstaticなクラスを渡してしまったところ、特に、目に見えるような何もエラーメッセージ等が出ず、その場所で処理がストップ(それ以降の処理がされなかったので、私には呼ばれた場所で関数がreturnされたように見えます)してしまいました

その時は特にtry-catchしていなかったので、なぜ処理がここで止まってしまうのかしばらく悩むことになりました

そこでお聞きしたいのですが、
・try-catchで囲まれていない処理で例外が発生した際、エラーメッセージを表示することなく黙って死ぬことがありますか?
・あるとしたら、try-catchで囲まれていない場合、必ず「例外が発生しました」のエラーメッセージダイアログを出すことはできますか?(特にDebug段階でその例外に気が付かないことを避けたい)

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

こんにちは。

例外は上に向かってスローされていきます。
少なくともC#では、どこかで握りつぶしていない限りはアプリケーションのエントリポイントまで。

ひとつめの解決策はVisualStudioを前提としますが、デバッグ時にどの例外で中断するか設定することです。
https://msdn.microsoft.com/ja-jp/library/x85tt0dd.aspx

ふたつめは、プラットフォームによって実装方法が異なりますが、UnhandledException系の処理をあらかじめ実装しておくことです。
http://dobon.net/vb/dotnet/programing/unhandledexception.html

投稿2015/10/18 12:27

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ElecDove

2015/10/21 01:02

回答ありがとうございます。UnhandledException系処理を実装することでとりあえず対応したいと思います。
guest

0

・try-catchで囲まれていない処理で例外が発生した際、エラーメッセージを表示することなく黙って死ぬことがありますか?

見たことが無いですが、起こりえるようですね。

あるとしたら、try-catchで囲まれていない場合、必ず「例外が発生しました」のエラーメッセージダイアログを出すことはできますか?(特にDebug段階でその例外に気が付かないことを避けたい)

エラーを知るという観点ではなく、期待通りの動作をしているかというチェックをおすすめします。

デバッグログを、メソッドの開始と終了位置に実装して、それがきちんと出力されているかチェックするという手法です。

投稿2015/10/18 20:20

TetsujiMiwa

総合スコア1124

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ElecDove

2015/10/21 01:05

回答ありがとうございます デバッグログ自体は出しているのですが、そのメソッド内に複数の例外を投げる可能性のある処理があると、どいつが例外を発してる(黙って死んでる)かがわからないですし、 それを特定するためにすべての処理にデバッグログを書くのも大変なので、ということで質問させていただきました。 もちろん、デバッグログの出力も併用します。
guest

0

例外処理がスローされる処理であれば、
上に向かってスローするか
try-catchがなければコンパイルエラー(警告?インフォメーション?)になります。
コンパイルオプションで警告やインフォメーションの段階のミスをチェックしてくれますよ。

投稿2015/10/18 11:21

maiko0318

総合スコア876

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問