自作例外発生時に、VisualStudioの例外設定を使って止めてもらう

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

「例外設定」の画面で、例外が発生したときにVisualStudioでプログラムを止めてくれるように設定できるが、元々ある例外に対してしかその設定をしたことがなかった。自前で作った例外でも同じことがしたくなったので、やり方調べたい。

やりかた

「例外設定」画面で、止める例外に自前の例外を追加する。

使ったサンプルコード

今回、下記のようなサンプルコードを使って、「MyExceptionTest」ネームスペースに「MyException」という例外を作ったことにする。

using System.Diagnostics;

namespace MyExceptionTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {
                throw new MyException();
            }
            catch (Exception ex) 
            {
                Debug.WriteLine("例外発生:" + ex.ToString());
            }
        }
    }

    [Serializable()]
    public class MyException : Exception
    {
        public MyException() : base() { }
        public MyException(string message) : base(message) { }
        public MyException(string message, System.Exception inner) : base(message, inner) { }

        protected MyException(System.Runtime.Serialization.SerializationInfo info,
          System.Runtime.Serialization.StreamingContext context)
        {
        }
    }
}

やり方詳細

メニューで、

[デバッグ] > [ウインドウ] > [例外設定]

を選択し、例外設定画面を開く。

下記のように例外設定画面が表示されるので、

表示された例外カテゴリの中のどれか一つを選択する。
(今回はCommon Language Runtime Exceptionを選んだ)

例外設定画面上部の、緑の「+」マークを押すと、下図のように、「例外の種類」を入力できるようになるので、

そこに、ネームスペースから、例外の名前を入力する。

※ネームスペースを入れないと、うまく止まってくれない。

ここまで設定してから、上で挙げたサンプルプログラムを実行すると、tryの中のthrow new MyException();の部分で、指定の例外が上がった時点で、

こんな感じで止めてくれる。

これで、やりたいことができた。

参考

MS公式 自前例外の作り方

https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/how-to-create-user-defined-exceptions

MS公式でない 自前例外の作り方

https://www.ipentec.com/document/csharp-define-throw-unique-exception