@ledsun blog

無味の味は佳境に入らざればすなわち知れず

C#をデバッグ実行するとfinallyブロックに入らない

こういうC#ソースコードがあります。

using System;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var hoge = 0;
                var fuga = 1;
                var piyo = fuga / hoge;
            }
            finally
            {
                Console.WriteLine("finally");
            }
        }
    }
}

デバッグ無しで実行します。

デバッグ無しで実行

例外がおきたあと、 finnallyブロックの処理が実行されて文字列finnallyが出力されます。

finallyブロックにブレークポイントをおいてデバッグ実行します。

tryブロックで例外が起きます。 ブレークポイントには到達しません。

デバッグかどうかで挙動が変わります。 デバッガが例外を捕まえるためになにかしているのでしょうか?