Caught OutOfMemoryException使调试变得困难

本文关键字:调试 OutOfMemoryException Caught | 更新日期: 2023-09-27 18:22:37

当我调试我的程序,并尝试在即时窗口中做某些事情时,它有时会在即时窗口显示一条错误消息,说:

由于内存不足,函数评估被禁用例外

它还显示了当通过悬停在对象的属性上查看对象的属性时。

在试图找到问题的原因后,我将其缩小到这个小代码示例:

using System;
using System.Text.RegularExpressions;
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //outofmemoryexception can be thrown by Image.FromFile("path/that/does/not/exist.png")
                //if the path points to a file that is not an image
                throw new OutOfMemoryException();
            }
            catch (OutOfMemoryException ex)
            {
                //caught the exception
                //so no problem, right?
            }
            //Random object to use in immediate window
            Random rand = new Random();
            //Also, try hovering over this regex and take a look at its properties.
            var test = new Regex("");
            //put a breakpoint here (at the next closing curly brace) and try calling rand.Next() in the immediate window
        }
    }
}

当OutOfMemoryException发生时,调试器似乎会抓狂,即使它被捕获了。。。

我可以想象,从来没有人想过调试一个出现OutOfMemoryException的程序是可能的。但遗憾的是,当文件不是图像时,Image.FromFile会抛出错误。。。

问题:

  1. 上面的代码示例会给其他人带来问题吗
  2. 有人能澄清一下吗?为什么会发生这种情况
  3. 最后,我该如何防止这种情况发生

Caught OutOfMemoryException使调试变得困难

是的,这是预期行为。

您需要让调试器运行(跨过或在下一行放置断点,然后单击F5),它才能从这种状态中恢复。即便如此,有时它也无济于事,直到您在堆栈上找到其他更高的函数才运行通常会使调试器再次合作。

请注意,OOM并不是唯一的情况,即即时窗口中长时间运行的代码会使调试器进入相同的状态。

更多信息-MSDN功能评估已禁用。。。,SO-功能评估被禁用,因为上一次功能评估超时