.net 调试Microsoft SharePoint代码-禁用优化

.net 调试Microsoft SharePoint代码-禁用优化,.net,debugging,sharepoint,iis,sharepoint-2010,.net,Debugging,Sharepoint,Iis,Sharepoint 2010,我想在SharePoint网站上调试Microsoft代码 我下载了Microsoft代码,因此我可以单步进入Microsoft代码,但当我尝试获取某些变量的值时,我得到了错误:“无法获取本地或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化。” 我试图取消优化,我看到了Cameron MacFarland写的内容,所以我创建了一个文件,其中包含了在没有JIT优化的情况下打开VS的命令。至于第二个动作——我不知道当IIS正在运行SharePoint应用程序时如何做 如何做到这一点 编辑

我想在SharePoint网站上调试Microsoft代码

我下载了Microsoft代码,因此我可以单步进入Microsoft代码,但当我尝试获取某些变量的值时,我得到了错误:
“无法获取本地或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化。”

我试图取消优化,我看到了Cameron MacFarland写的内容,所以我创建了一个文件,其中包含了在没有JIT优化的情况下打开VS的命令。至于第二个动作——我不知道当IIS正在运行SharePoint应用程序时如何做

如何做到这一点

编辑:我的问题基本上是:当代码由IIS运行时,如何禁用代码优化?

我发布了答案,然后发现它也适用于您的特定问题

长话短说,有一个注册表设置,你可以改变,使这项工作。 在“HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment”的注册表中添加一个名为“COMPLUS\u ZAPDISABLE”的字符串键。将键值设置为“1”


这本原著帮助我找到了这个窍门。

我最后做的解决方案, 这或多或少是JaredPar写的:

我创建了一个如下所示的文件:

[.NET Framework Debugging Control] 
GenerateTrackingInfo=1 
AllowOptimize=0
我把它放在GAC中,在dll的每个文件夹中,我想禁用它的优化,并用dll的名称命名它,扩展名为“ini”


现在,绝大多数变量对我都可用。

它帮助我看到了其中一些不可用变量的值。谢谢。现在我又需要它了,我添加了那个键,但仍然有很多变量对我不可用。也许我还应该做些什么呢?我建议尝试一下克莱夫文章中提到的一些附加技术,特别是关于使用windbg来实际观察jitting行为的技术。对我来说,我能够始终只使用注册表设置进行调试,所以我不需要走那么远。可能性是如果你的VAR被优化了,那是因为抖动。诀窍是找出触发它的原因——可能有不止一条途径。我想到的一个想法是,使用一个独立的应用程序池来调试您的代码,以确保其他应用程序不会导致加载优化的代码。此外,如果您在关闭此设置后打开此设置,则需要确保内存中没有任何优化的代码,否则将在调试会话中重新使用。为了解决这个问题,我在更改注册表后总是小心地运行iisreset。它是SharePoint,所以我的Web应用程序有自己的应用程序池,我在添加注册表项后运行iisreset。不过,并不是所有的东西都对我有用。是的,这对我来说也很有用。它似乎比简单地使用注册表更改更可靠。名称中不应包含“dll”。例如,如果我想运行未优化的System.Web.dll,那么我需要一个名为System.Web.ini的文件放在它旁边(而不是System.Web.dll.ini)。