触发VS2010调试器中的终结器

时间:2012-06-26 07:17:43

标签: .net visual-studio-2010 debugging task-parallel-library finalizer

对托管代码使用VS2010调试器是否可以触发终结器线程运行?

用例:

使用Tasks可能会在Task对象的终结器上抛出异常(如果有任务) 自我抛出异常,而那些没有被照顾。

验证错误修正因为未处理可能非常耗时,因为您需要等待终结器线程启动才能确保修复正常工作。

我自己通常不使用终结器进行编码,因为它引起了很多麻烦,我也向微软邮寄了这个。但是它是这样的:如何触发终结器代码从调试器运行而不是代码。

1 个答案:

答案 0 :(得分:2)

AFAIK没有特殊的方法可以从调试器中执行此操作。

您可以在代码中触发它:

    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();

现在取消注释两行以查看异常。

请注意,应用于测试等场景;你不应该在常规代码中使用GC