Freigeben über


Erweiterte Funktionalitätsbibliothek für Visual Studio AddressSanitizer (VCAsan)

Die VCAsan*.lib Bibliotheken implementieren erweiterte Debugger-IDE-Features in Visual Studio. Diese Features ermöglichen es der IDE, AddressSanitizer-Fehler in Live-Debugsitzungen oder offline anzuzeigen, indem eine Absturzabbilddatei mit Metadaten gespeichert wird. Die Bibliothek ist jedes Mal verknüpft, wenn AddressSanitizer vom MSVC-Compiler aktiviert ist.

VCAsan-Bibliotheksbestand

Runtime-Option VCAsan-Linkbibliothek
/MT libvcasan.lib
/MD vcasan.lib
/MTd libvcasand.lib
/MDd vcasand.lib

VCAsan-Bibliotheksfeatures

Rich AddressSanitizer-Fehlerberichtsfenster in Visual Studio IDE

Die VCAsan-Bibliothek registriert einen Rückruf innerhalb der AddressSanitizer-Laufzeit mithilfe der Schnittstellenfunktion __asan_set_error_report_callback. Wenn ein AddressSanitizer-Bericht generiert wird, wird dieser Rückruf verwendet, um eine Ausnahme auszuwerfen, die von Visual Studio abgefangen wird. Visual Studio verwendet die Ausnahmedaten, um die Meldung zu generieren, die dem Benutzer in der IDE angezeigt wird.

Hinweis

Die VCAsan-Bibliothek registriert eine Rückruffunktion in der AddressSanitizer-Laufzeit. Wenn Ihr Code diese Registrierungsfunktion ein zweites Mal aufruft, überschreibt er die VCAsan-Bibliotheksrückrufregistrierung. Dies führt zu einem Verlust aller Visual Studio-IDE-Integrationen. Sie rückgängig machen zurück zur Standardmäßigen IDE-Benutzeroberfläche. Es ist auch möglich, dass der Anruf eines Benutzers, der seinen Rückruf registriert, verloren gehen kann. Wenn ein Problem auftritt, führen Sie einen Fehler aus.

Speichern von AddressSanitizer-Fehlern in einem neuen Typ von Absturzabbilddatei

Wenn Sie die VCAsan-Bibliothek mit Ihrer ausführbaren Datei verknüpfen, können Benutzer es aktivieren, um zur Laufzeit ein Absturzabbild zu generieren. Anschließend erzeugt die AddressSanitizer-Laufzeit eine Speicherabbilddatei, wenn ein diagnostizierter Fehler auftritt. Um dieses Feature zu aktivieren, legt der Benutzer die ASAN_SAVE_DUMPS Umgebungsvariable mithilfe eines Befehls wie diesem fest:

set ASAN_SAVE_DUMPS=MyFileName.dmp

Die Datei muss über eine .dmp Erweiterung verfügen, um den Visual Studio-IDE-Konventionen zu folgen. (Vor 17.7)

Dies geschieht, wenn eine Speicherabbilddatei angegeben ist: ASAN_SAVE_DUMPSWenn ein Fehler von der AddressSanitizer-Laufzeit erfasst wird, wird eine Absturzabbilddatei gespeichert, die mit dem Fehler verknüpft ist. Der Debugger in Visual Studio, Version 16.9 und höher, kann die Metadaten analysieren, die in der Speicherabbilddatei gespeichert sind. Sie können pro Test festlegen ASAN_SAVE_DUMPS , diese binären Artefakte speichern und diese dann in der IDE mit der richtigen Quellindizierung anzeigen.

Visual Studio, Version 17.7 und höher, unterstützt Folgendes:

  • An zitierte Zeichenfolgen werden jetzt richtig behandelt. In früheren Versionen kann für Umgebungen innerhalb von Visual Studio oder bei Verwendung von PowerShell die Umgebungsvariable auf Anführungszeichen oder Leerzeichen nicht erstellt werden.

  • Wenn die .dmp Erweiterung explizit angegeben ist (z set ASAN_SAVE_DUMPS=MyDmp.dmp. B. ), verwendet VCAsan sie explizit und fügt dem Namen der Dumpdatei keine zugeordnete Prozess-ID hinzu.

  • Wenn eine .dmp Datei bereits mit demselben Namen vorhanden ist, der aus der Umgebungsvariable angegeben ist, ändert VCAsan den Dateinamen wie folgt:

    • Fügt eine Zahl an den Dateinamen in Klammern an. Beispiel: Myfile (1).dmp.
    • Wenn nach mehreren Versuchen, eine Zahl in Klammern anzufügen, kein eindeutiger Name generiert werden kann, wird die Datei in einem %APPLOCAL% temporären Pfad gespeichert, den VCAsan druckt. Beispiel: C:\Users\~\AppData\Local\Temp\Dump.dmp.
    • Wenn das Speichern in einem temporären Pfad fehlschlägt, wird ein Diagnosefehler angezeigt.

Siehe auch

AddressSanitizer -Übersicht
Beheben bekannter Probleme mit demSanitizer
AddressSanitizer Build- und Sprachreferenz
AddressSanitizer-Laufzeitreferenz
AddressSanitizer-Schattenbytes
AddressSanitizer-Cloud oder verteilte Tests
Beispiele für AddressSanitizer-Fehler