本ブログでは初学者向けに、デバッグに役立つ「例外設定」機能を紹介します。
例外がキャッチされてるのに原因が分からない…?
そんな悩みを解決するのが、Visual Studio の「例外設定」機能です。C# プログラマ向けに、Visual Studio の「例外設定」機能の基本から活用テクまでわかりやすく紹介します。
Visual Studio 2022 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で補足される


 
  
  
  
  
