c# - .NET 4 中的 StackOverflowException

标签 c# .net crash runtime stack-overflow

在我升级到 .NET 4 (x64) 之前,以下代码工作正常

namespace CrashME
{
    class Program
    {
        private static volatile bool testCrash = false;
        private static void Crash()
        {
            try
            {
            }
            finally
            {
                HttpRuntime.Cache.Insert("xxx", testCrash);
            }

        }

        static void Main(string[] args)
        {
            Crash();
            // Works on .NET 3.5 , crash on .NET 4
        }
    }
}

我是刚刚发现了一个运行时错误,还是我的使用存在问题?

最佳答案

这似乎是 CLR 中的错​​误 - 您应该向 Microsoft 报告它。

请注意 StackOverflowException 在 CLR 尝试执行 Crash 时发生,而不是 执行期间发生Crash 方法 - 实际上程序永远不会进入该方法。这似乎表明这是 CLR 中的一些低级故障。 (另请注意,抛出的异常也没有堆栈跟踪)。

此异常非常特定于这种情况 - 更改许多事情中的任何一个都可以解决此问题,例如以下代码可以正常工作:

private static void Crash()
{
    bool testCrash2 = testCrash;
    try { }
    finally
    {
        HttpRuntime.Cache.Insert("xxx", testCrash2);
    }
}

我建议您向 Microsoft 报告此问题,但同时尝试通过调整您的代码来解决此问题。

关于c# - .NET 4 中的 StackOverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3562008/

相关文章:

c++ - 为什么不能捕获 C++ 异常

c# - 文件中的文本未附加 - C#

c# - 如何使用 MVP 中的模型填充数据 GridView

c# - 以编程方式调用 SendTo

android - 无法理解此堆栈跟踪(parse.com)

mongodb - 服务器崩溃后 mongod 无法启动

c# - 使用Nest DSL语法用多个术语过滤的ElasticSearch嵌套查询无法按预期工作

c# - 在 ASP.NET Ajax 页面上执行另一个任务之前检查挂起的更改

c# - 获取类型 'where' 上的泛型方法 'System.Linq.Queryable' 与提供的类型参数和参数不兼容

.net - 使用 oracle.dataaccess.dll 时出错