- Incohérences entre allocation et désallocation, et incohérences de type entre new et delete
- Allocations trop volumineuses pour le tas
- Dépassements de calloc et d’alloca
- Double libération et utilisation après libération
- Dépassement de variable globale
- Dépassement de mémoire tampon du tas
- Alignement non valide de valeurs alignées
- Chevauchement de paramètres de memcpy et strncat
- Dépassement de mémoire tampon de la pile, par excès et par défaut
- Utilisation de la pile après le retour et après la sortie de la portée
- Utilisation de mémoire après son empoisonnement
Activer ASan dans le compilateur
Address Sanitizer est intégré au système de projet de Visual Studio, au système de build CMake et à l’IDE. Les projets peuvent activer AddressSanitizer à l’aide d’une option de compilateur supplémentaire,/fsanitize=address, ou en définissant une propriété de projet dans Visual Studio :

Cette option est compatible avec tous les niveaux d’optimisation et toutes les configurations x64. Elle est toutefois incompatible avec
edit-and-continue, incremental linking et /RTC, qui doivent être désactivés avant de compiler avec ASan.$(VC_LibraryPath_VC_x64) soit la dernière de la liste afin qu’elle ne soit pas utilisée pour d’autres bibliothèques, comme illustré ci-dessous :

Exigences d’exécution d’ASan
Lorsqu’un jeu est généré avec ASan activé, une DLL supplémentaire doit être présente à l’exécution pour activer la fonctionnalité. Par défaut, lorsqu’ASan est activé dans le compilateur, la DLL est copiée dans le répertoire de sortie de votre projet et doit ensuite être déployée sur la console à côté de l’exécutable. Si nécessaire, les DLL se trouvent manuellement dans le répertoire$(VC_ExecutablePath_x64) de Visual Studio. XBOX nécessite l’une des deux, selon la version de build :
Prise en charge du débogueur à l’exécution
Lorsque vous exécutez un jeu avec ASan activé et qu’un débogueur est attaché, toute erreur détectée provoque un arrêt dans le débogueur et l’affichage d’un rapport détaillé qui vous permet de déterminer où l’erreur s’est produite. En revanche, si vous exécutez le jeu sans débogueur attaché, par exemple dans une infrastructure de test automatisé, les informations d’erreur sont affichées sur la sortie standard et le jeu se termine. Cela peut être utile, mais vous aurez peut-être besoin de davantage d’informations d’état pour trouver la cause racine du plantage ; c’est là qu’intervient la prise en charge des vidages sur incident.Si vous exécutez le jeu sans débogueur attaché et que les symboles doivent être résolus à ce moment-là, vous devez déployer le fichier
llvm-symbolizer.exe à côté de l’EXE de votre jeu. Ce fichier se trouve au même emplacement que les DLL d’exécution d’ASan répertoriées ci-dessus.Prise en charge des vidages sur incident à l’exécution
À partir de Visual Studio 16.9.8 ou 16.10.2, ASan peut être configuré pour enregistrer un fichier de vidage sur incident contenant les métadonnées associées à l’erreur. Le débogueur de Visual Studio peut analyser les métadonnées enregistrées dans le fichier de vidage pour fournir davantage de contexte sur le plantage. Vous pouvez configurer cet enregistrement des vidages sur incident build par build, stocker ces artefacts binaires, puis les afficher dans l’IDE avec une indexation correcte des sources. La documentation sur les vidages sur incident est disponible ici : Configuring Crash Dumps (Microsoft Docs) Toutefois, l’approche indiquée ci-dessus nécessite de définir une variable d’environnement, ce qui n’est pas pris en charge sur XBOX ; une autre méthode a donc été implémentée. Pour ajouter la prise en charge des vidages sur incident à votre titre XBOX, il vous suffit de définir une fonction de rappel qui fournit à ASan les informations nécessaires sur le nom du fichier de vidage. Trois exemples sont présentés ci-dessous.Le nom de fichier comporte généralement le suffixe .dmp, conformément aux conventions de l’IDE Visual Studio
Comme pour la fonction précédente, cette substitution est facultative sur XBOX, mais elle est fortement recommandée si vous souhaitez utiliser des vidages sur incident pour collecter des informations ASan sans débogueur attaché. Si vous fournissez le nom du fichier de vidage mais pas de substitution du type de vidage, la génération d’un vidage sur incident valide échouera sur XBOX.
Exemple de code ASan
Ce code montre avec quelle facilité ces fonctions peuvent être ajoutées à une base de code existante et adaptées selon les besoins :Problèmes connus
- L’ASan de Visual Studio 2019 (16.11) n’est pas compatible avec Game OS.
- La DLL ASan n’est pas compatible avec Game OS et ne parvient pas à se charger avec les versions initiales de 17.12 et de 17.13. Ce problème est corrigé à partir des versions 17.12.6 et 17.13.3.
- Une régression de la prise en charge d’ASan pour Game OS, qui entraînait un plantage au démarrage avec Visual Studio 2022, a été corrigée dans la version 17.14.29, et dans la version 18.4.1 pour Visual Studio 2026.
- Dans le débogueur, lors de l’exécution sur XBOX, le message d’exception suivant est émis à intervalles réguliers, mais peut être ignoré sans risque.
