Maison > développement back-end > C++ > Quels sont les « noms magiques » du débogueur Visual Studio et comment fonctionnent-ils ?

Quels sont les « noms magiques » du débogueur Visual Studio et comment fonctionnent-ils ?

Susan Sarandon
Libérer: 2025-01-13 11:39:43
original
633 Les gens l'ont consulté

What are the Visual Studio Debugger's

Dévoilement des conventions de dénomination énigmatiques de Visual Studio Debugger

Les prouesses de débogage de Visual Studio s'étendent au-delà de la surface, en utilisant des « noms magiques » générés par le compilateur pour gérer diverses entités de programme. Ces noms, bien que souvent cachés dans l'interface utilisateur, permettent des fonctionnalités de débogage et des optimisations avancées. Comprendre ces modèles de dénomination est essentiel pour naviguer efficacement dans le fonctionnement interne du débogueur.

Bien que Microsoft ne documente pas publiquement tous les détails de la mise en œuvre, l'analyse de la source C# GeneratedNames.cs révèle des informations précieuses sur ces conventions de dénomination. Notez que ces conventions sont sujettes à changement sans préavis.

Variables cachées et stockage temporaire :

  • Locales inutilisées : Le débogueur marque les variables locales inutilisées avec le suffixe __Deleted$, un indicateur clair de l'optimisation du compilateur.

  • Variables temporaires : Les variables temporaires utilisent le CS$X$Y schéma de dénomination :

    • X : Représente la nature du temporaire (par exemple, 0 pour une durée de vie courte, 1 pour les valeurs de retour, 2 pour les instructions de verrouillage, etc.). Une clé complète est fournie ci-dessous.
    • Y : Un numéro séquentiel identifiant l'instance temporaire spécifique.

Noms spéciaux générés par le compilateur :

Le compilateur génère des noms uniques pour diverses structures et opérations internes, notamment :

  • État de l'itérateur (state)
  • Valeur actuelle de l'itérateur (current)
  • Paramètres de l'itérateur et variables hissées
  • Instance de classe de fermeture d'itérateur (locals)
  • Délégué de méthode anonyme mis en cache (CachedAnonymousMethodDelegate)
  • Instance d'itérateur (iterator)
  • Méthodes anonymes et leurs classes de fermeture (DisplayClass)
  • Classe d'itérateur
  • Tampons fixes (FixedBuffer)
  • Types anonymes (AnonymousType, Field, TPar)
  • Champs de sauvegarde de propriété automatique (BackingField)
  • ID du fil d'itérateur
  • Itérateur finally blocs (Finally)
  • Conteneurs dynamiques et sites d'appels (SiteContainer, Site, SiteDelegate)
  • Appel de référence COM locaux (ComRefCallLocal)
  • Suivi d'acquisition de verrouillage (LockTaken)
  • Expressions de requête temporaires (TransparentIdentifier)

La formule du nom magique :

Le modèle général de ces noms magiques est le suivant : P<n>C__SI, où :

  • P : CS$ préfixe pour les délégués mis en cache et les instances de classe d'affichage ; sinon, vide.
  • <n> : Le nom de la variable d'origine (le cas échéant).
  • C : Un seul caractère (1 à s) indiquant le type d'entité.
  • S : Un suffixe descriptif facultatif.
  • I : Un identifiant unique facultatif.

Clé de type variable temporaire :

  • 0 : Temporaires de courte durée
  • 1 : Valeur de retour temporaires
  • 2 : Déclaration de verrouillage temporaire
  • 3 : Utiliser des relevés temporaires
  • 4 : Temporaires durables
  • 5 : Résultat de l'enquêteur Foreach
  • 6 : Stockage de baie Foreach
  • 7 : Stockage d'index de tableau Foreach
  • 8-264 : Stockages d'index de tableaux multidimensionnels
  • 264 : chaîne temporaire d'instructions fixes

Cette ventilation détaillée offre une compréhension plus claire des noms souvent cryptiques rencontrés lors du débogage dans Visual Studio. N'oubliez pas que ces informations sont basées sur l'observation et sont susceptibles de changer avec les futures mises à jour du compilateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal