AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

.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:181659
用户头像

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

关注

评论

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

HyperWorks基于几何投影的网格变形

智造软件

仿真 altair hyperworks

反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理

京东科技开发者

AlDente Pro for Mac(MacBook 电池健康的实用小工具)

Mac相关知识分享

Sketch for mac(专业矢量绘图设计软件)中文版

Mac相关知识分享

SecureCRT for mac(终端SSH工具)

Mac相关知识分享

企业数字化转型现状

芯盾时代

数字化转型 iam

Go语言中的加解密利器:go-crypto库全解析

左诗右码

Go

IPQ5312, IPQ5322, and IPQ5332: Analysis of Differences and Applications in WiFi 7 Motherboard Chips

wifi6-yiyi

5G WiFi7 6G

行政人员必备!如何快速生成一批人员信息卡?

草料二维码

一键擦除手写笔迹,试试这款省时省力的学习利器

合合技术团队

学习 手写识别 文字擦除 人工智能】

从 Llama 1 到 3.1:Llama 模型架构演进详解

Baihai IDP

程序员 AI LLM llama Baihai IDP

记录一次RPC服务有损上线的分析过程

京东科技开发者

打造个性化的Allure2报告:定制Logo和样式的软件测试报告

测试人

软件测试

套娃嵌入:如何优化向量搜索成本,并兼顾延迟与召回

Zilliz

Milvus 向量搜索 套娃嵌入 向量存储

CodeRunner for Mac(多功能代码编辑软件)v4.4注册激活版

小玖_苹果Mac软件

FL Studio提速这样做!告别卡顿、闪退,畅快编曲

阿拉灯神丁

音乐制作 编曲软件 FL Studio2024 FL水果

项目申报评审系统(源码+文档+部署+讲解)

深圳亥时科技

俯瞰 Monorepo,别一番风景!

蛋先生DX

前端 前端架构 前端工程化 Monorepo

CST软件如何将平面结构弯曲贴到另一个结构上

思茂信息

仿真 cst CST软件

拼多多商品详情数据接口(Pdd.item_get)丨拼多多API接口指南

tbapi

拼多多商品详情接口 拼多多API接口

【行云流水线】满足你对工作流编排的一切幻想~skr

京东科技开发者

XMind for mac (XMind思维导图)中文版

Mac相关知识分享

2024 都要过完了,我不允许你在 Go 中还不会解决 CORS 跨域问题

江湖十年

Go 面试 后端 CORS 跨域

多客校园圈子小程序源码 校园生活综合服务平台 校园服务小程序源码

DUOKE七七

2025山西晋中等保测评机构地址在哪里?电话多少?

行云管家

等保 等保测评 晋中

商业开源服饰电商大模型-摹图

摹图

AI AI大模型 AI 图像生成

公共事业信息系统怎么定义?需要过等保吗?

行云管家

信息系统 等保 等保测评 公共事业

社区论坛小圈子小程序源码系统:自定义小程序管理社区圈子软件圈子系统系统开发-做社区圈子丨圈子论坛社区交友系统开源版小程序源码丨

DUOKE七七

php 源码 开源软件

如何把苹果电脑里的照片导出至U盘 Mac照片批量拷到移动硬盘

阿拉灯神丁

存储 拷贝 硬盘 Tuxera NTFS教程 mac 效率工具

16.迭代器模式设计思想

杨充

【HarmonyOS NEXT】实战——登录页面

帅比九日

鸿蒙 arkui ArkTS HarmonyOS NEXT

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