首页 > 后端开发 > C++ > Visual Studio 调试器的'神奇名称”是什么以及它们如何工作?

Visual Studio 调试器的'神奇名称”是什么以及它们如何工作?

Susan Sarandon
发布: 2025-01-13 11:39:43
原创
635 人浏览过

What are the Visual Studio Debugger's

揭开 Visual Studio 调试器神秘的命名约定

Visual Studio 的调试能力超出了表面,它使用编译器生成的“魔术名称”来管理各种程序实体。这些名称虽然通常在用户界面中隐藏,但可以实现高级调试功能和优化。 理解这些命名模式是有效导航调试器内部工作的关键。

虽然 Microsoft 没有公开记录完整的实现细节,但对 C# GeneratedNames.cs 源代码的分析揭示了对这些命名约定的宝贵见解。请注意,这些约定如有更改,恕不另行通知。

隐藏变量和临时存储:

  • 未使用的局部变量:调试器使用 __Deleted$ 后缀标记未使用的局部变量,这是编译器优化的明确指示。

  • 临时变量: 临时变量使用 CS$X$Y 命名方案:

    • X:表示临时的性质(例如,0 表示短暂,1 表示返回值,2 表示锁定语句等)。 下面提供了完整的密钥。
    • Y:标识特定临时实例的序列号。

编译器生成的特殊名称:

编译器为各种内部结构和操作生成唯一的名称,包括:

  • 迭代器状态 (state)
  • 迭代器当前值 (current)
  • 迭代器参数和提升变量
  • 迭代器闭包类实例 (locals)
  • 缓存的匿名方法委托 (CachedAnonymousMethodDelegate)
  • 迭代器实例 (iterator)
  • 匿名方法及其闭包类 (DisplayClass)
  • 迭代器类
  • 固定缓冲区 (FixedBuffer)
  • 匿名类型 (AnonymousType, Field, TPar)
  • 自动属性支持字段 (BackingField)
  • 迭代器线程 ID
  • 迭代器 finally 块 (Finally)
  • 动态容器和调用站点(SiteContainerSiteSiteDelegate
  • COM 参考呼叫当地人 (ComRefCallLocal)
  • 锁定获取跟踪 (LockTaken)
  • 临时查询表达式 (TransparentIdentifier)

神奇的名字公式:

这些魔法名称的一般模式如下:P<n>C__SI,其中:

  • PCS$ 缓存委托和显示类实例的前缀;否则,空。
  • <n>:原始变量名称(如果适用)。
  • C:表示实体类型的单个字符(1 到 s)。
  • S:可选的描述性后缀。
  • I:可选的唯一标识符。

临时变量类型键:

  • 0:短暂的临时对象
  • 1:返回临时值
  • 2:锁定语句临时
  • 3:使用语句临时变量
  • 4:耐用的临时件
  • 5:Foreach 枚举器结果
  • 6:Foreach数组存储
  • 7:Foreach数组索引存储
  • 8-264:多维数组索引存储
  • 264:字符串固定语句临时

此详细的细分可以让您更清楚地了解在 Visual Studio 中调试时遇到的经常神秘的名称。 请记住,此信息基于观察,可能会随着未来编译器的更新而变化。

以上是Visual Studio 调试器的'神奇名称”是什么以及它们如何工作?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板