1

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

用例:

如果任务本身已引发异常并且未处理这些异常,则使用任务可能会在对象的终结器上引发异常。Task

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

我自己通常不使用终结器进行编码,因为它会引起很多头痛,而且我还向 Microsoft 发送了有关此问题的邮件。但是虽然它是这样的:如何触发终结器代码从调试器运行,而不是从代码运行。

4

1 回答 1

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

于 2012-06-26T07:22:41.423 回答