写点什么

.NET 4.6 的 RyuJIT 编译器中发现严重的 Bug

  • 2015-07-29
  • 本文字数:1185 字

    阅读完需:约 4 分钟

来自 Stack Exchange 的开发者 Nick Craver 与 Marc Gravell 在.NET 4.6 中引入的 RyuJIT 编译器中发现了一个严重的 bug,.NET 4.6 会随着 Visual Studio 2015 一起安装,并且也预装在 Windows 10 操作系统中。Craver 和 Gravell 已经提交了这个 bug 的详细说明,他们追踪到问题的根源来自于 RyuJIT 在处理尾调用优化时的一个问题。这个问题产生的结果是“……我们所调用的方法没有获得所传入的参数”,正如他们所说,如果受到此问题影响的变量原本是用于处理重要的值,那么将因此造成严重的后果。

来自微软的 Matt Mitchell 对这个发现做出了回应,他提交了一个补丁(通过 pull request)以修复这个问题。有趣的是,有人发现这个问题本来已经被修复了,但在三天前(7 月 24 日)又被微软的另一位开发者撤消了。Craver 指出,这个 bug 的存在之所以不那么容易立即发现,是由于以下几点原因:

  • 这个问题只有在应用了代码优化之后才会出现,由于多数开发者与项目都是在 DEBUG 模式开发的,因此在本地环境中看不出来。
    • 这也意味着你只能在 RELEASE 模式下发现它,对于多数人来说,这就意味着它只存在于生产环境。
  • 一旦为进程附加了调试器就会改变它的行为,这几乎让这个问题完全隐形了。
  • 如果在代码中加入一句 Debug.WriteLine(),就很可能修复这个问题,因为尾调用的方式产生了变化。

有一个重要的提示:即使微软已经在 GitHub 代码库中接受了这个补丁,也不意味着这个问题就此结束了。对于已经安装了.NET 4.6 的用户来说,微软必须为他们提供新的二进制包。Craver 建议,如果开发者还没有在生产环境上部署.NET 4.6,那么请耐心等待打了补丁的安装包出现。而如果你已经安装了.NET 4.6(无论在哪一种环境中),Craver 建议你立即关闭 RyuJIT,并且通过一些概念验证式的代码告诉开发者如何进行操作。另外还有一个重要的提示,由于这个问题所影响的是RyuJIT 编译器,因此它同样会影响那些目标为较早版本的.NET 运行时。

微软的回应(更新于2015 年7 月28 日)

来自微软的Rich Lander 对于Craver 与Gravell 的报告进行了正式的回应,他在回应中提到这个bug 仅会影响64 位进程,而不会影响32 位进程。虽然Lander 表示他的团队目前并不认为这个问题会被人利用,但他们还是会将修复代码提交至发布流程中。

在Lander 的说明中,他也推荐在使用.NET Framework 4.6 的环境中关闭RyuJIT 的方式,直到补丁包出现为止。不过,考虑到故障检测不等人,最好还是先研究一下这个bug 是否确实对你的实际情况生产了影响,因为如果你的应用程序有什么异常的行为,也有可能是别的原因引起的。

根据Lander 的说明,F#的开发者最有可能遇到由这个bug 所引起的问题,因此应当尽量避免安装.NET 4.6,Lander 在文中给出了如何重现这个问题的C#与F#示例代码。微软目前还没有说明这个补丁的发布日期。

查看英文原文: Critical Bug Revealed in .NET 4.6’s RyuJIT Compiler

2015-07-29 08:181916
用户头像

发布了 428 篇内容, 共 190.5 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

DeSci 启蒙:从文艺复兴到 Web3.0 的科研革命梦想

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

模型输出可保存为数据集、支持配置社区活动作为课程作业|ModelWhale 版本更新

ModelWhale

Python 人工智能 数据分析 元数据

Navicat for SQL Server for mac(数据库管理工具)v17.1.6激活版

小玖_苹果Mac软件

Serial for Mac(全功能串行终端管理软件)v2.0.17激活版

小玖_苹果Mac软件

明道云正式发布国际品牌Nocoly

明道云

重塑用户体验!快手电商智能巡检平台的实践与探索

快手技术

前端

InfluxDB vs TDengine :2025 年了,谁家用的数据库还不能高效读缓存?

TDengine

数据库 tdengine 时序数据库

Pioneer DJ rekordbox for Mac(专业的DJ音乐管理软件) v5.8.6.0004激活版

小玖_苹果Mac软件

Kubernetes为什么要从docker切换ContainerD

虚实的星空

Docker Containerd

Web端软件测试工具

测试人

软件测试

TextIn文档解析表格处理模型优化,显著提升表格解析性能

合合技术团队

人工智能 表格 AIGC 文档图像

ERP系统实施的难点不是系统本身,而是企业的人与管理

积木链小链

企业管理 ERP 中小企业

NTFS Disk by Omi NTFS for mac(NTFS 磁盘管理器)v1.1.4中文版

小玖_苹果Mac软件

俄罗斯通过加密货币税法:重新定义数字货币规则

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 链游开发代币开发

解锁电商数据宝藏:淘宝天猫API接口深度探索——商品评论与描述详情图获取指南

代码忍者

API 接口 pinduoduo API

电力数据驱动的节能创新:TDengine Cloud 在智慧楼宇中的深度应用

TDengine

数据库 tdengine 时序数据库

TDengine vs InfluxDB:谁的“流式计算”功能是真的?

TDengine

数据库 tdengine 时序数据库

Set A Light 3D Studio for Mac(3D摄影棚布光工具)v2.58d永久试用版

小玖_苹果Mac软件

聚焦实践,面向前端|12月7日华为云首届开源开发者论坛火热报名中~

OpenTiny社区

开源 前端 低代码 组件库 OpenTiny

Tower for Mac(强大的Git客户端)v12.3注册激活版

小玖_苹果Mac软件

夜莺短信告警教程

巴辉特

夜莺监控 夜莺Nightingale 夜莺短信告警

Elasticearch索引mapping写入、查看、修改

京东科技开发者

MacCleaner Pro for Mac(系统综合清理软件)v3.3.5永久激活版

小玖_苹果Mac软件

MPC2024明道云伙伴大会圆满结束

明道云

Microsoft Excel 2019 for Mac(excel电子表格)中文正式版

小玖_苹果Mac软件

TDengine 签约深圳综合粒子,赋能粒子研究新突破

TDengine

数据库 tdengine 时序数据库

大促系统优化之应用启动速度优化实践

京东零售技术

后端 大促

.NET 4.6的RyuJIT编译器中发现严重的Bug_.NET_Jeff Martin_InfoQ精选文章