Ome*_*viv 13 c# compiler-construction debugging visual-studio
如果检查Reflector中的C#代码,您可以注意到使用模式CS $ X $ Y命名的特殊编译器生成的局部变量.这些变量是(非正式地)记录在这个答案中.
有没有办法通过Visual Studio中的Watch窗口或通过VS Debugger Extensibility API查看这些值?
我是专门询问常规的Visual Studio调试器,请不要回答这可能是通过windbg/sos/sosex - 因为那不是我正在寻找的.
Jar*_*Par 32
不幸的是,没有办法用C#EE做到这一点.这些本地人的名字确实存储在PDB中并且可用.但是,C#EE将在调试期间过滤掉所有临时值以减少混乱.此过滤是无条件的,无法覆盖.C#并不孤单,因为这是每种语言的行为.
然而,好消息是每种语言都为他们的临时使用不同的命名模式.这意味着C#中的临时名称将在VB EE的过滤之后运行.即使它是非法标识符,VB EE仍然认为它是有效的本地(反之亦然).因此,您只需要暂时将C#代码的调试引擎切换到VB EE,本地将变为可见
这是怎么做的
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\AD7Metrics\ExpressionEvaluator\{3F5162F8-07C6-11D3-9053-00C04FA302A1}\{994B45C4-E6E9-11D2-903F-00C04FA302A1}{60F5556F-7EBC-4992-8E83-E9B49187FDE3}为{59924502-559A-4BB1-B995-5D511BB218CD}现在无论何时调试C#代码,它都将使用VB EE,因此将临时值显示为普通本地.请注意,这是完全不受支持的.但它应该工作正常.我能够在我的机器上看到这个技巧的原始闭包值,并且没有任何问题地捅了一下.
请注意,这些说明特定于Visual Studio 2013.如果您使用的是2012或2010,则应通过将注册表项名称中的12.0_Config更改为
它可能需要一些调整(实际上没有测试旧版本).如果您遇到任何问题,请告诉我,我会尝试让它在本地工作并更新说明
进行此更改后,这是最终输出的图片

| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |