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

时间:2009-06-05 13:43:31

标签: .net 64-bit

Microsoft已解释说他们不支持在Visual Studio 2010中的x64 CLR下编辑和继续:

  

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

     

[...]

     

不幸的是,为64位CLR添加了对EnC的真正支持,考虑到将平台目标更改为x86的工作,大型工作项和其他功能优先于此。

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

Microsoft Connect上的描述使得64位Edit and Continue看起来好像是一个重大的体系结构更改。我的问题是: x64有什么不同让EnC变得困难?

除了“64位EnC无法正常工作”之外,我无法在网络上找到技术细节方面的内容。

3 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分: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调试的改进。

答案 2 :(得分:0)

似乎新的.NET框架支持这一点。来自.NET Framework 4.5.1 Preview

的详细信息部分
  

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

     

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

在安装了.NET 4.5.1预览版的Visual Studio 2012中仍然无法正常工作。