首頁 >後端開發 >C++ >Visual Studio 偵錯器的「神奇名稱」是什麼以及它們如何運作?

Visual Studio 偵錯器的「神奇名稱」是什麼以及它們如何運作?

Susan Sarandon
Susan Sarandon原創
2025-01-13 11:39:43635瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn