Visual Studio调试器-通过调试器访问编译器生成的临时变量的任何方法?

奥梅尔·拉维夫(Omer Raviv)

如果您在Reflector中检查C#代码,您会注意到编译器生成的特殊局部变量以模式CS $ X $ Y命名。这些变量(非正式地)记录在此答案中

是否可以通过Visual Studio中的“监视”窗口或VS Debugger Extensibility API查看这些值?

我专门询问常规的Visual Studio调试器,请不要回答通过windbg / sos / sosex这是可能的-因为这不是我想要的。

Jaredpar

不幸的是,使用C#EE无法做到这一点。这些本地人的名称确实存储在PDB中并且可用。但是,C#EE将在调试过程中过滤掉所有临时值以减少混乱。此过滤是无条件的,不能被覆盖。这里不是C#一个人,因为这是每种语言的行为。

好消息是,每种语言为其临时使用不同的命名方式。这意味着C#中的临时名称将在VB EE过滤之后运行。即使它是一个非法标识符,VB EE仍然认为它是有效的本地标识符(反之亦然)。因此,您只需要临时将C#代码的调试引擎切换到VB EE,就可以看到本地语言了。

这是怎么做的

  • 关闭Visual Studio的所有实例(这非常重要)
  • 打开注册表
  • 导航 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\AD7Metrics\ExpressionEvaluator\{3F5162F8-07C6-11D3-9053-00C04FA302A1}\{994B45C4-E6E9-11D2-903F-00C04FA302A1}
  • 将CLSID的值从更改{60F5556F-7EBC-4992-8E83-E9B49187FDE3}{59924502-559A-4BB1-B995-5D511BB218CD}

现在,每当调试C#代码时,它将使用VB EE,因此将临时显示为普通本地。请注意,这是完全不受支持的。但它应该工作正常。我可以在我的机器上看到此技巧的原始闭包值,并进行一些尝试而没有任何问题。

请注意,这些说明特定于Visual Studio2013。如果使用的是2012或2010,则应将注册表项名称中的12.0_Config更改为

  • 2012使用11.0_Config
  • 2010使用10.0_Config

除此之外,可能还需要进行一些调整(实际上未测试旧版本)。如果您遇到任何问题,请告诉我,我将尝试使其在本地运行并更新说明

完成更改后,这是最终输出的图片

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Visual Studio 2015调试器崩溃

来自分类Dev

在Visual Studio调试器中如何访问IloIntArray元素?

来自分类Dev

在Visual Studio调试器中更改显示变量的顺序

来自分类Dev

Visual Studio 2015社区-调试器行为异常

来自分类Dev

强制C ++程序在Visual Studio调试器中暂停

来自分类常见问题

Visual Studio如何从调试器序列化对象

来自分类Dev

程序在Visual Studio调试器中挂起

来自分类Dev

Visual Studio调试器-源搜索目录

来自分类Dev

Visual Studio 2013 Update 1调试器崩溃

来自分类Dev

尝试启动内核调试器时,Visual Studio崩溃

来自分类Dev

如何关闭崩溃的Visual Studio调试器?

来自分类Dev

使Visual Studio调试器目标正确的应用程序

来自分类Dev

Visual Studio 2015远程调试器“未实现”

来自分类Dev

什么是“ Visual Studio调试器ETW服务”?

来自分类Dev

调试器在Visual Studio中不起作用

来自分类Dev

Visual Studio Code的调试器和Pipenv

来自分类Dev

Visual Studio调试器如何检测功能调用?

来自分类Dev

Visual Studio 2012调试器无法正常工作

来自分类Dev

Visual Studio 2015社区-调试器行为异常

来自分类Dev

Visual Studio 2013调试器矢量值错误

来自分类Dev

bash 脚本中 Python 命令的 Visual Studio 调试器

来自分类Dev

如何使JavaScript闯入IE内置调试器(F12)而不是Visual Studio调试器?

来自分类Dev

如何在Visual Studio Code中使用Delve调试器进行远程调试

来自分类Dev

Visual Studio调试器,不要在停止调试时停止网站

来自分类Dev

无法在Visual Studio 2013调试器中调试CRT源文件

来自分类Dev

用于打印调试信息的C#或Visual Studio调试器

来自分类Dev

Visual Studio调试器在混合调试模式下停止击中断点

来自分类Dev

用于打印调试信息的C#或Visual Studio调试器

来自分类Dev

Visual Studio远程调试器“对内存位置的无效访问”功能

Related 相关文章

  1. 1

    Visual Studio 2015调试器崩溃

  2. 2

    在Visual Studio调试器中如何访问IloIntArray元素?

  3. 3

    在Visual Studio调试器中更改显示变量的顺序

  4. 4

    Visual Studio 2015社区-调试器行为异常

  5. 5

    强制C ++程序在Visual Studio调试器中暂停

  6. 6

    Visual Studio如何从调试器序列化对象

  7. 7

    程序在Visual Studio调试器中挂起

  8. 8

    Visual Studio调试器-源搜索目录

  9. 9

    Visual Studio 2013 Update 1调试器崩溃

  10. 10

    尝试启动内核调试器时,Visual Studio崩溃

  11. 11

    如何关闭崩溃的Visual Studio调试器?

  12. 12

    使Visual Studio调试器目标正确的应用程序

  13. 13

    Visual Studio 2015远程调试器“未实现”

  14. 14

    什么是“ Visual Studio调试器ETW服务”?

  15. 15

    调试器在Visual Studio中不起作用

  16. 16

    Visual Studio Code的调试器和Pipenv

  17. 17

    Visual Studio调试器如何检测功能调用?

  18. 18

    Visual Studio 2012调试器无法正常工作

  19. 19

    Visual Studio 2015社区-调试器行为异常

  20. 20

    Visual Studio 2013调试器矢量值错误

  21. 21

    bash 脚本中 Python 命令的 Visual Studio 调试器

  22. 22

    如何使JavaScript闯入IE内置调试器(F12)而不是Visual Studio调试器?

  23. 23

    如何在Visual Studio Code中使用Delve调试器进行远程调试

  24. 24

    Visual Studio调试器,不要在停止调试时停止网站

  25. 25

    无法在Visual Studio 2013调试器中调试CRT源文件

  26. 26

    用于打印调试信息的C#或Visual Studio调试器

  27. 27

    Visual Studio调试器在混合调试模式下停止击中断点

  28. 28

    用于打印调试信息的C#或Visual Studio调试器

  29. 29

    Visual Studio远程调试器“对内存位置的无效访问”功能

热门标签

归档