是否有可能将系统.NET DLL调试为未经优化?

时间:2010-02-20 02:46:49

标签: .net debugging

我正在尝试在.NET Framework中调试一些代码。不幸的是,许多变量都被优化掉了,由于流优化,我无法可靠地设置指令指针。

是否可以强制运行时不使用.NET系统DLL的ngen'd版本,而是使用MSIL,强制优化为'off'?

注意:我尝试使用INI技巧设置AllowOptimize = false,但没有区别。

3 个答案:

答案 0 :(得分:11)

这是另一个选项(来自http://martin.bz/asp-net-mvc-source-debugging-the-easy-way):

  

转到System.Web.Mvc .dll所在的目录:

     

C:\的Windows \组件\ GAC_MSIL \ System.Web.Mvc \ 2.0.0.0__31bf3856ad364e35 \

     

创建文件System.Web.Mvc.ini

[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0
     

下次进入MVC源代码时,您可以检查所有内容   变量

http://msdn.microsoft.com/en-us/library/9dd8z24x.aspx

的更多详情

答案 1 :(得分:8)

得到John Robbins的答案。基本上,在你的环境变量中坚持COMPLUS_ZapDisable = 1(包裹在一个蝙蝠中以避免未经优化地运行整个系统)并禁用VS主机进程。

http://blogs.msdn.com/sburke/archive/2008/01/29/how-to-disable-optimizations-when-debugging-reference-source.aspx

另一个选项是新的.NET Reflector Pro,它允许您选择性地反编译/重新编译未经优化的程序集。没有必要使用参考源,但备份很好。

http://www.red-gate.com/products/reflector/features_pro.htm

答案 2 :(得分:1)

为什么不用Reflector看到.NET框架本身的代码? Reflector使您可以查看任何.NET程序集的代码[包括.NET框架本身!],甚至可以重新编译它! - 当然这适用于非混淆的组件!