Jez*_*Jez 3 asp.net debugging visual-studio-2022
在 Visual Studio 2022 调试会话期间,我使用源链接和 Microsoft 符号服务器调试一些 ASP.NET 内部代码,但我无法查看变量,因为它已被优化掉;但是,Quickview 有一个“禁用托管优化并重新启动调试”的选项。我选择了这个,重新启动调试,并且我确实能够查看该变量。然而,我现在担心我已经禁用了一些优化,这可能会减慢速度,而且我不清楚选择该选项实际上会改变什么。Visual Studio 中的哪些设置会发生变化?如何重新启用托管优化?
以下是该选项在 UI 下拉列表中以及单击时的外观的一些屏幕截图:
在许多编译语言中,例如 C 和 C++,通常只有一个地方应用优化:当您运行编译器时(尽管对于具有单独的编译器和链接器的旧工具链来说,具有单独的编译时和链接也很常见) -时间优化)。
...但在 .NET 世界中,情况稍微复杂一些:
C csc#-to-IL(或 VB.NET-to-IL、F# 等)编译器可以优化从 C# 生成的 IL(标志/optimize)。
if( false ) { /* here */ })。当CLR 加载构建的 .NET 程序集(.NET.dll或)时,JIT 可以应用自己的优化。.exe
DebuggableAttribute( DebuggingModes.DisableOptimizations )或 with 的程序集 - 当使用withisJITOptimizerDisabled: false时,此属性会添加到程序集。csc.exe/debug虽然严格来说不是编译器“优化”,但当 .NET 程序运行时,CLR 可能会加载特定于您的计算机的托管程序集的缓存本机映像版本。
ngen.exe(自 Windows 8 起)生成的,可以在后台抢先编译程序集,而无需ngen.exe手动运行。CrossGen2.readytorun,后者有自己的优化,并且超出了本答案的范围。[assembly: Debuggable]/DebuggableAttributeVisual Studio 中的“禁用托管优化并重新启动调试”实际更改了哪些设置?
消息框允许您更改Tools>>Options下的“抑制模块加载时的 JIT 优化(仅限托管)”设置Debugging:
但是我现在担心我禁用了一些优化,这可能会减慢速度
不用担心:“抑制 JIT 优化... ”设置仅在调试时阻止非项目程序集的 JIT 优化 - 尽管在许多情况下仍将使用 ngen'd 图像(因此仍会运行优化的 cod ,除非您使用COMPlus_ZapDisable)。
Visual Studio 中的哪些设置会发生变化?如何重新启用托管优化?
转到调试器设置并取消选中“抑制 JIT 优化...”选项。
如果您使用“调试器模块”窗口查看加载的每个 .NET 程序集,以及其 JIT 优化状态、符号状态以及 VS 是否将其视为“用户代码”,您就可以看到发生了什么。
| 归档时间: |
|
| 查看次数: |
1605 次 |
| 最近记录: |