繁体   English   中英

Windows 10 Creators更新.net 4.7 System.AccessViolationException问题

[英]Windows 10 Creators update .net 4.7 System.AccessViolationException issue

在将Windows 10更新为使用.net 4.7创建者更新之后,我在启动非常简单的代码方面遇到了关键问题。

说明:由于未处理的异常,进程已终止。 异常信息:System.AccessViolationException

class Program
{
        private int? m_bool;
        private bool prop {get{ return false;}}
        void test()
        {
            //nothing
        }
        private object Test()
        {
            if (prop)
            {                    
                try
                {
                    test();
                }
                catch (Exception) {}

                m_bool = 1;                    
            }
            return null;
        }

        static void Main(string[] args)
        {
            new Program().Test();
        }
}

似乎类似的问题是https://github.com/dotnet/coreclr/issues/10826

有人知道如何避免这种情况吗?

当优化在无法访问的基本块上运行时,会引起此问题。 在您的情况下,编译器内联get_prop方法(无条件返回false)。 这导致JIT编译器认为该区域不可访问。 通常,JIT编译器在运行优化之前会删除无法访问的代码,但是添加try / catch区域会使JIT不会删除这些基本块。

如果要防止该问题,可以禁用优化,禁用get_prop的内联或将get_prop方法的实现更改为:

    static bool s_alwaysFalse = false;
    private bool prop {get{ return s_alwaysFalse;}}

我们已经有一些关于此问题的报告,并且我们已经准备好修复程序,它将在以后的更新中提供给用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM