为什么不编辑并继续在x64 CLR上工作?

微软已经解释说,他们不会支持Visual Studio 2010中x64 CLR下的编辑和继续:

当在VS2010中为.NET 4.0创建一个新的Visual C#控制台应用程序时,该项目的默认目标设置是针对x86平台而不是像Visual Studio 2008那样的任何CPU(MSIL)

[...]

不幸的是,为EnC增加对64位CLR的真正支持是一个很大的工作项目,其他功能的优先顺序是考虑到将平台目标更改为x86的工作。

(来自http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=455103)

Microsoft Connect上的描述使其看起来好像64位的“编辑并继续”是一个主要的体系结构更改。 我的问题是: 什么是不同的X64,使EnC困难?

除了“64位EnC不工作”之外,我一直无法在网络上找到很多技术细节。


编辑并继续要求编译器修补正在运行的可执行文件。 这通常是通过替换所有更改的功能来完成的。 显然,它的JITted版本也必须被丢弃,并且调用者可能调整到可能的新位置。

这对于x64来说并不是特别困难,可能与x86一样困难。 但是与x86不同的是,这还没有完成。 x86和x64之间的差异足够大,您不能简单地使用x86 EnC代码并在8中更改每4个代码。


此博客文章扩展了MSalters所说的内容:http://blogs.msdn.com/rmbyers/archive/2009/06/08/anycpu-exes-are-usually-more-trouble-then-they-re-worth.aspx

基本上,微软更有兴趣改进x86调试工具(如Intellitrace),而不是改进x64调试工具。 这非常令人担忧,因为似乎Intellitrace在某些时候也必须移植到x64,这可能会进一步延迟对x64调试的改进。


看起来像新的.NET框架支持这一点。 从.NET Framework 4.5.1 Preview的细节部分

.NET Framework 4.5.1 Preview ...包含这些重要的增强功能:

...
64位编辑并继续
...

在安装.NET 4.5.1 Preview的Visual Studio 2012中仍然不起作用。

链接地址: http://www.djcxy.com/p/29099.html

上一篇: Why doesn't Edit and Continue work on the x64 CLR?

下一篇: What is the best way to program against powershell's x64 vs. x86 variability