Bekannte Probleme von AddressSanitizer

Hinweis

Senden Sie uns Feedback dazu, was Sie in zukünftigen Releases sehen möchten, und melden Sie Fehler, wenn Probleme auftreten.

Inkompatible Optionen und Funktionen

Diese Optionen und Funktionen sind nicht kompatibel mit /fsanitize=address und sollten deaktiviert oder vermieden werden.

Standardbibliotheksunterstützung

Die MSVC-Standardbibliothek (STL) ist nicht für das Verständnis des AddressSanitizers erkläre. AddressSanitizer-Ausnahmen, die im STL-Code ausgelöst werden, identifizieren echte Fehler. Sie sind jedoch nicht so präzise, wie sie sein könnten.

In diesem Beispiel wird die fehlende Genauigkeit veranschaulicht:

// Compile with: cl /fsanitize=address /Zi
#include <vector>

int main() {   
    // Create a vector of size 10, but with a capacity of 20.    
    std::vector<int> v(10);
    v.reserve(20);

    // Currently, MSVC ASan does NOT raise an exception here.
    // While this is an out-of-bounds write to 'v', MSVC ASan
    // ensures the write is within the heap allocation size (20).
    v[10] = 1;

    // MSVC ASan DOES raise an exception here, as this write
    // is out of bounds from the heap allocation.
    v[20] = 1;
}

Windows Versionen

Da Abhängigkeiten mit bestimmten Windows Versionen vorhanden sind, konzentriert sich die Unterstützung auf Windows 10. MSVC AddressSanitizer wurde mit 10.0.14393 (RS1) und 10.0.21323 (Insider-Vorabbuild) getestet. Melden Sie einen Fehler, wenn Probleme auftreten.

Speicherauslastung

Die AddressSanitizer-Runtime gibt während der Ausführung keinen Arbeitsspeicher an das Betriebssystem zurück. Aus Sicht des Betriebssystems kann es so aussehen, als ob ein Speicherverlust vorkomme. Diese Entwurfsentscheidung ist beabsichtigt, um nicht den gesamten erforderlichen Arbeitsspeicher vorab zuzuordnen.

Dll-Speicherorte der AddressSanitizer-Runtime

Die clang_rt.asan*.dll Laufzeitdateien werden neben den Compilern in %VSINSTALLDIR%\VC\Tools\MSVC\<version>\bin\<host-arch>\<target-arch>\ installiert. Diese Speicherorte befinden sich im Pfad in Debugsitzungen und in Visual Studio Developer-Eingabeaufforderungen. Diese Dateien werden nie in C:\Windows\System32 oder C:\Windows\SysWOW64 platziert.

Unterstützung für benutzerdefinierte Eigenschaftenblätter

Mit dem fenster Eigenschaften-Manager in der Visual Studio-IDE können Sie Ihren Projekten benutzerdefinierte .props Dateien hinzufügen. Obwohl die Eigenschaft Adressbereinigung aktivieren ( ) angezeigt wird, wird sie vom Build nicht berücksichtigt. Dies liegt daran, dass die benutzerdefinierten .props Dateien nach eingeschlossen Microsoft.cpp.props werden, wodurch der <EnableASAN> -Wert verwendet wird, um andere Eigenschaften festzulegen.

Als Problemumgehung können Sie Directory.Build.props eine Datei im Stammverzeichnis Ihres Projekts erstellen, um die Eigenschaft zu <EnableASAN> definieren. Weitere Informationen finden Sie unter Anpassen von C++-Builds.

Siehe auch

Übersicht über AddressSanitizer
Kompilierungs- und Sprachreferenz für AddressSanitizer
Runtimereferenz für AddressSanitizer
AddressSanitizer-Schattenbytes
AddressSanitizer-Tests in der Cloud oder verteilten Umgebungen
Integration des AddressSanitizer-Debuggers
AddressSanitizer-Fehlerbeispiele