AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

代币经济学赋能社区自运营:构建Web3时代的永动飞轮

区块链软件开发推广运营

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

什么是公链?公链项目有哪些?公链项目开发

区块链软件开发推广运营

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

如何做到供应链的协同管理?

积木链小链

数字化转型 智能制造 供应链管理

业内首次! 全面复现DeepSeek-R1-Zero 数学、代码能力,训练步数仅需R1-Zero 1/10

快手技术

LLM

赋能车联网 | 智能地铁物联系统,让出行更顺畅

KaiwuDB

数据库 赋能 kwdb

图形化编程逆转黑盒:让 AI 生成代码更可控

代码制造者

AI编程

Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合

阿里巴巴云原生

阿里云 云原生 MCP

意图框架事件推荐方案,精准匹配用户需求

HarmonyOS SDK

harmoyos

78%开发者已用AI工具:飞算JavaAI「完整工程代码生成」能否改写职场规则?

飞算JavaAI开发助手

马蹄链DAPP代币合约流动性挖矿分红系统开发详细及方案

区块链软件开发推广运营

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

干货:如何成为AI产品经理?

科技热闻

浅析金仓数据库KingbaseES的Query Mapping:无需改代码的 SQL 优化神器

金仓技术

KingBase 金仓数据库

企业为什么要用私有化的视频会议软件?BeeWorks Meet支持私有化

BeeWorks

即时通讯 IM 私有化部署 企业级应用

新加坡见!快手11篇论文入选人工智能领域顶会ICLR 2025

快手技术

人工智能 Iclr

《重塑AI应用架构》系列: Serverless与MCP融合创新,构建AI应用全新智能中枢

华为云开发者联盟

,华为云 华为开发者空间

与智者同行:京东零售技术人的成长书单

京东零售技术

从 0 到微服务商城系统:飞算 JavaAI 自动生成多模块代码 + 服务治理

飞算JavaAI开发助手

开发认为测试不及时,测试吐槽工作量太大?

禅道项目管理

DevOps 软件开发 效能管理 测试人员 测试效率

企业AI成功落地的关键:生产级AI应用背后的“脏活累活”

UniverAI智宇苍穹

开发平台 企业 AI 应用 AI落地 AI 大模型 企业级AI工程化

新系统上线前夜 VS 旧 RBAC 漏洞?飞算 JavaAI 10 分钟重构全套权限逻辑

飞算JavaAI开发助手

【华为云MySQL技术专栏】MySQL的WriteSet并行复制介绍

华为云开发者联盟

,华为云 华为开发者空间

通过阿里云Milvus与通义千问VL大模型,快速实现多模态搜索

阿里云大数据AI技术

大数据 阿里云 向量检索 多模态 Milvus

企业办公即时通讯软件BeeWorks,私有化安全防泄密

BeeWorks

IM 即时通讯IM 私有化部署 企业级应用

吼吼科技:在智能制造领域的合作与创新之路

极客天地

打破"沙漏“现象→提高生成式搜索/推荐的上限

京东零售技术

飞算 JavaAI 的 “需求变更” 解决方案:让开发更灵活!

飞算JavaAI开发助手

福启云端,相约榕城,4月29日,不见不散!

天翼云开发者社区

智能云 数字中国

企业异地组网方案:IEPL/IPLC与MPLS/SD-WAN对比

Ogcloud

SD-WAN 企业组网 异地组网

埋点系统技术选型-自研还是开源?

ClkLog

开源 数据分析 埋点 用户行为分析 客户画像

生成式 AI 引爆广告效率革命,揭秘京东大模型应用架构的实践之道

京东零售技术

从 “码农” 到 “架构师”:AI 工具如何助力职业跃迁?

飞算JavaAI开发助手

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