我正在尝试在.NET Framework中调试一些代码。不幸的是,许多变量都被优化掉了,由于流优化,我无法可靠地设置指令指针。
是否可以强制运行时不使用.NET系统DLL的ngen'd版本,而是使用MSIL,强制优化为'off'?
注意:我尝试使用INI技巧设置AllowOptimize = false,但没有区别。
答案 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源代码时,您可以检查所有内容 变量
答案 1 :(得分:8)
得到John Robbins的答案。基本上,在你的环境变量中坚持COMPLUS_ZapDisable = 1(包裹在一个蝙蝠中以避免未经优化地运行整个系统)并禁用VS主机进程。
另一个选项是新的.NET Reflector Pro,它允许您选择性地反编译/重新编译未经优化的程序集。没有必要使用参考源,但备份很好。
答案 2 :(得分:1)
为什么不用Reflector看到.NET框架本身的代码? Reflector使您可以查看任何.NET程序集的代码[包括.NET框架本身!],甚至可以重新编译它! - 当然这适用于非混淆的组件!