Heim >Backend-Entwicklung >C++ >Was sind die „Magic Names' des Visual Studio Debuggers und wie funktionieren sie?

Was sind die „Magic Names' des Visual Studio Debuggers und wie funktionieren sie?

Susan Sarandon
Susan SarandonOriginal
2025-01-13 11:39:43635Durchsuche

What are the Visual Studio Debugger's

Enthüllung der rätselhaften Namenskonventionen des Visual Studio Debuggers

Die Debugging-Fähigkeiten von Visual Studio reichen über die Oberfläche hinaus und nutzen vom Compiler generierte „magische Namen“ zur Verwaltung verschiedener Programmeinheiten. Diese Namen sind zwar häufig auf der Benutzeroberfläche verborgen, ermöglichen jedoch erweiterte Debugging-Funktionen und Optimierungen. Das Verständnis dieser Namensmuster ist der Schlüssel zur effektiven Navigation durch das Innenleben des Debuggers.

Während Microsoft die vollständigen Implementierungsdetails nicht öffentlich dokumentiert, liefert die Analyse der C#-GeneratedNames.cs-Quelle wertvolle Einblicke in diese Namenskonventionen. Beachten Sie, dass diese Konventionen ohne Vorankündigung geändert werden können.

Versteckte Variablen und temporärer Speicher:

  • Unbenutzte lokale Variablen: Der Debugger markiert nicht verwendete lokale Variablen mit dem Suffix __Deleted$, ein klarer Indikator für die Compileroptimierung.

  • Temporäre Variablen: Temporäre Variablen verwenden das CS$X$Y Benennungsschema:

    • X: Stellt die Art des Temporären dar (z. B. 0 für kurzlebig, 1 für Rückgabewerte, 2 für Sperranweisungen usw.). Ein vollständiger Schlüssel finden Sie unten.
    • Y: Eine fortlaufende Nummer, die die spezifische temporäre Instanz identifiziert.

Vom Compiler generierte spezielle Namen:

Der Compiler generiert eindeutige Namen für eine Vielzahl interner Strukturen und Operationen, darunter:

  • Iteratorstatus (state)
  • Aktueller Iteratorwert (current)
  • Iteratorparameter und gehisste Variablen
  • Instanz der Iterator-Abschlussklasse (locals)
  • Zwischengespeicherter anonymer Methodendelegat (CachedAnonymousMethodDelegate)
  • Iterator-Instanz (iterator)
  • Anonyme Methoden und ihre Abschlussklassen (DisplayClass)
  • Iterator-Klasse
  • Feste Puffer (FixedBuffer)
  • Anonyme Typen (AnonymousType, Field, TPar)
  • Auto-Eigenschaft-Backing-Felder (BackingField)
  • Iterator-Thread-ID
  • Iterator finally blockiert (Finally)
  • Dynamische Container und Aufrufseiten (SiteContainer, Site, SiteDelegate)
  • COM-Referenzanruf Einheimische (ComRefCallLocal)
  • Sperrerfassungsverfolgung (LockTaken)
  • Temporäre Abfrageausdrücke (TransparentIdentifier)

Die magische Namensformel:

Das allgemeine Muster für diese magischen Namen lautet: P<n>C__SI, wobei:

  • P: CS$ Präfix für zwischengespeicherte Delegaten und Anzeigeklasseninstanzen; andernfalls leer.
  • <n>: Der ursprüngliche Variablenname (falls zutreffend).
  • C: Ein einzelnes Zeichen (1 bis s), das den Entitätstyp angibt.
  • S: Ein optionales beschreibendes Suffix.
  • I: Eine optionale eindeutige Kennung.

Temporärer variabler Artenschlüssel:

  • 0: Kurzlebige Provisorien
  • 1: Temporäre Rückgabewerte
  • 2: Temporäre Kontoauszüge sperren
  • 3: Verwendung von Kontoauszugsprovisorien
  • 4: Langlebige Provisorien
  • 5: Foreach-Enumeratorergebnis
  • 6: Foreach-Array-Speicher
  • 7: Foreach-Array-Indexspeicher
  • 8-264: Mehrdimensionale Array-Indexspeicher
  • 264: Temporäre Zeichenfolge mit fester Anweisung

Diese detaillierte Aufschlüsselung bietet ein klareres Verständnis der oft kryptischen Namen, die beim Debuggen in Visual Studio auftreten. Denken Sie daran, dass diese Informationen auf Beobachtungen basieren und sich bei zukünftigen Compiler-Updates ändern können.

Das obige ist der detaillierte Inhalt vonWas sind die „Magic Names' des Visual Studio Debuggers und wie funktionieren sie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn