本ブログでは初学者向けに、デバッグに役立つ「例外設定」機能を紹介します。
例外がキャッチされてるのに原因が分からない…?
そんな悩みを解決するのが、Visual Studio の「例外設定」機能です。C# プログラマ向けに、Visual Studio の「例外設定」機能の基本から活用テクまでわかりやすく紹介します。
Visual Studio C#「 例外設定」とは?
例外設定ウィンドウでは、以下のようなことができます。
- 特定の例外が発生した瞬間(スローされた瞬間)に中断(
try-catch
で捕捉されていても) - 例外の種類ごとに中断の有無を設定
- 独自に定義したカスタム例外も追加可能
Visual Studio C#「 例外設定」の使い方
- [デバッグ] > [ウィンドウ] > [例外設定] を選択
- 表示されたウィンドウで例えば
- Common Language Exception の
System.
DivideByZeroException(0割り) にチェックを入れる
- Common Language Exception の
- これで、その例外がスローされた瞬間に Visual Studio が中断してくれます

■簡単な具体例
通常は catch
に入って処理が続きますが、例外設定で DivideByZeroException
にチェックを入れておくと、例外発生の行で中断してくれます。これにより、例外の発生箇所を正確に特定できます。

Visual Studio C# でチェックを推奨する主なCLR例外
System.NullReferenceException
(ヌル参照例外)System.AccessViolationException
(メモリアクセス違反)System.DivideByZeroException
(ゼロ除算例外)System.InvalidOperationException
(無効な操作)System.IndexOutOfRangeException
(配列の範囲外アクセス)System.StackOverflowException
(スタックオーバーフロー)System.OutOfMemoryException
(メモリ不足)System.ArgumentException
(無効な引数)System.ArgumentNullException
(ヌル引数)System.ArgumentOutOfRangeException
(範囲外の引数)System.IO.IOException
(入出力エラー)System.FormatException
(フォーマットエラー)System.TypeInitializationException
(型の初期化エラー)
- CLR例外
- .NET の Common Language Runtime (CLR) によって管理される例外。これは、C# や VB.NET などの .NET 言語で発生する例外を統一的に処理するための仕組です。
- 上記の推奨するCLR例外の中には標準でチェックが入っている場合もあります。
「Visual Studio C#」カスタム例外
C# では特定のエラー状況を、標準の Exception
クラスを継承する事で自作の例外として定義する事も可能です。
自作の例外(例:MyCustomException
)は、例外設定ウィンドウの「+」ボタンから追加すれば、CLRと同様に中断対象にできます。
※名前空間を定義している場合は、名前空間名を付けて追加する
カスタム例外を活用するメリット
- 広範囲に try-catch を使っているコードでも、例外の発生箇所を特定しやすくなる
- 非同期処理や外部ライブラリの例外も追いやすくなる
- 「マイコードのみ」設定と組み合わせると、ユーザーコードに限定して中断可能となる
カスタム例外を使用すべき状況
- ドメイン固有のエラーを表現したい
- 例:銀行システムで「残高不足」を表す
InsufficientFundsException
- 例:ECサイトで「在庫切れ」を表す
OutOfStockException
- 例:銀行システムで「残高不足」を表す
- 特定のエラーに対して専用の処理をしたい
- 例:
FileProcessingException
を作成し、ファイル関連のエラーを一括管理 - 例:
InvalidUserInputException
を作成し、ユーザー入力エラーを適切に処理
- 例:
- 標準の例外では意味が曖昧な場合
ArgumentException
ではなくInvalidPasswordException
など、より明確なエラー名を付けることで可読性向上
- エラー情報を追加したい
- 例:
DatabaseConnectionException
にConnectionString
を保持し、ログ出力時に詳細情報を提供
- 例:
Visual Studio C#「カスタム例外」の作成手順
カスタム例外のサンプルとしてファイルが存在しない場合に、catch で補足するのではなく、例外をスローした行で実行を中断する設定を紹介します。
- ソースコード
- Exceptionクラスを継承したカスタム例外「FileMissingException」を作成
FilePath
プロパティ を追加し、例外発生時に 問題のあるファイルのパスを保持- コンストラクタで
message
とfilePath
を受け取り、base(message)
で親クラスのException
にメッセージを渡す
- 処理部分
- ファイルが存在するかを確認し、ファイルがなかったら「FileMissingException」例外をスローする
- 「FileMissingException」例外はcatchでも補足
- Exceptionクラスを継承したカスタム例外「FileMissingException」を作成

- 例外設定にカスタム例外「FileMissingException」を追加
- [デバッグ] > [ウィンドウ] > [例外設定] で例外設定画面を表示
- 今回は、①の「Common Language Runtime Exceptions」を選択
- ②の追加「+」がクリックできるようになるのでクリック

- 入力欄にカスタム例外の名称を入力(namespaceを定義している場合はnamespace名を付加)


- Debugモードで実行すると、例外のスローで実行が中断する

- Debugモードなしで実行すると、catchで補足される
