1

マネージド コードに VS2010 デバッガーを使用すると、ファイナライザー スレッドの実行をトリガーできますか?

使用事例:

タスク自体Taskが例外をスローし、それらが処理されていない場合、タスクを使用すると、オブジェクトのファイナライザーで例外がスローされる場合があります。

修正が適切に機能することを確認する前に、ファイナライザ スレッドが起動するのを待つ必要があるため、原因が未処理であったバグ修正の検証には時間がかかる場合があります。

私は通常、ファイナライザーを自分で使用してコーディングすることはありません。これは、多くの頭痛の種になるためです。また、これについて Microsoft にメールしました。しかし、それは次のようなものですが: コードではなくデバッガーから実行するようにファイナライザー コードをトリガーするにはどうすればよいでしょうか。

4

1 に答える 1

2

私の知る限り、デバッガーからこれを行う特別な方法はありません。

コードでトリガーできます:

    int i = 0, j = 1;
    new Task(() => Console.WriteLine(j/i)).Start();
    Thread.Sleep(1000); // make sure it has had plenty of time
    //GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
    //GC.WaitForPendingFinalizers();
    Console.WriteLine("Did I explode yet?");
    Console.ReadKey();

ここで、2 行のコメントを外して、例外が表示されることを確認します。

これは、テストなどのシナリオでのみ使用する必要があることに注意してください。GC通常のコードでは実際に使用しないでください。

于 2012-06-26T07:22:41.423 に答える