Partager via


Bibliothèque de fonctionnalités étendues De Visual Studio AddressSanitizer (VCAsan)

Les VCAsan*.lib bibliothèques implémentent des fonctionnalités IDE de débogueur étendues dans Visual Studio. Ces fonctionnalités permettent à l’IDE d’afficher les erreurs AddressSanitizer dans les sessions de débogage actives ou hors connexion en enregistrant un fichier de vidage sur incident avec des métadonnées. La bibliothèque est liée chaque fois que AddressSanitizer est activé par le compilateur MSVC.

Inventaire des bibliothèques VCAsan

Runtime Bibliothèque de liens VCAsan
/MT libvcasan.lib
/MD vcasan.lib
/MTd libvcasand.lib
/MDd vcasand.lib

Fonctionnalités de la bibliothèque VCAsan

Fenêtre de rapport d’erreurs AddressSanitizer enrichie dans l’IDE Visual Studio

La bibliothèque VCAsan inscrit un rappel dans le runtime AddressSanitizer à l’aide de la fonction __asan_set_error_report_callbackd’interface. Si un rapport AddressSanitizer est généré, ce rappel est utilisé pour lever une exception interceptée par Visual Studio. Visual Studio utilise les données d’exception pour générer le message affiché à l’utilisateur dans l’IDE.

Remarque

La bibliothèque VCAsan inscrit une fonction de rappel dans le runtime AddressSanitizer. Si votre code appelle cette fonction d’inscription une deuxième fois, il remplace l’inscription de rappel de la bibliothèque VCAsan. Cela entraîne la perte de l’intégration de l’IDE Visual Studio. Vous revenez à l’expérience utilisateur de l’IDE par défaut. Il est également possible que l’appel d’un utilisateur inscrit son rappel soit perdu. Si vous rencontrez un problème, faites un bogue.

Enregistrer les erreurs AddressSanitizer dans un nouveau type de fichier de vidage sur incident

Lorsque vous liez la bibliothèque VCAsan à votre exécutable, les utilisateurs peuvent l’activer pour générer un vidage sur incident lors de l’exécution. Ensuite, le runtime AddressSanitizer génère un fichier de vidage lorsqu’une erreur diagnostiqué se produit. Pour activer cette fonctionnalité, l’utilisateur définit la variable d’environnement à l’aide ASAN_SAVE_DUMPS d’une commande telle que celle-ci :

set ASAN_SAVE_DUMPS=MyFileName.dmp

Le fichier doit avoir une .dmp extension pour suivre les conventions de l’IDE Visual Studio. (Avant la version 17.7)

Voici ce qui se passe lorsqu’un fichier de vidage est spécifié pour ASAN_SAVE_DUMPS: si une erreur est interceptée par le runtime AddressSanitizer, elle enregistre un fichier de vidage sur incident qui contient les métadonnées associées à l’erreur. Le débogueur dans Visual Studio version 16.9 et versions ultérieures peut analyser les métadonnées enregistrées dans le fichier de vidage. Vous pouvez définir ASAN_SAVE_DUMPS sur une base par test, stocker ces artefacts binaires, puis les afficher dans l’IDE avec l’indexation source appropriée.

Visual Studio version 17.7 et versions ultérieures prend en charge les éléments suivants :

  • Les chaînes entre guillemets sont désormais gérées correctement. Dans les versions précédentes, pour les environnements à l’intérieur de Visual Studio ou lors de l’utilisation de PowerShell, la définition de la variable d’environnement pour contenir des guillemets ou des espaces ne peut pas créer le fichier de vidage attendu.

  • Lorsque l’extension .dmp est spécifiée explicitement (par exemple, set ASAN_SAVE_DUMPS=MyDmp.dmp), VCAsan l’utilise explicitement et n’ajoute pas d’ID de processus associé au nom du fichier de vidage.

  • Si un .dmp fichier existe déjà avec le même nom spécifié à partir de la variable d’environnement, VCAsan modifie le nom de fichier comme suit :

    • Ajoute un nombre au nom de fichier entre parenthèses. Par exemple : Myfile (1).dmp.
    • Si après plusieurs tentatives d’ajout d’un nombre entre parenthèses ne parvient pas à générer un nom unique, le fichier est enregistré dans un %APPLOCAL% chemin temporaire que VCAsan imprime. Par exemple : C:\Users\~\AppData\Local\Temp\Dump.dmp.
    • Si l’enregistrement dans un chemin temporaire échoue, une erreur de diagnostic s’affiche.

Voir aussi

Vue d’ensemble de AddressSanitizer
Résoudre les problèmes connus liés à AddressSanitizer
Référence de build et de langage AddressSanitizer
Informations de référence sur le runtime AddressSanitizer
Octets d’ombre AddressSanitizer
Test cloud ou distribué AddressSanitizer
Exemples d’erreur AddressSanitizer