Bekannte Probleme von AddressSanitizer

Hinweis

Senden Sie uns Feedback dazu, was Sie in zukünftigen Versionen 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.

  • Die /RTC-Optionen sind mit AddressSanitizer nicht kompatibel und sollten deaktiviert werden.
  • Die inkrementelle Verknüpfung wird nicht unterstützt und sollte deaktiviert werden.
  • Edit-and-Continue (Bearbeiten und fortfahren) wird nicht unterstützt und sollte deaktiviert werden.
  • Coroutines sind nicht mit AddressSanitizer kompatibel, und fortsetzbare Funktionen sind von der Instrumentierung ausgenommen.
  • OpenMP wird nicht unterstützt und sollte deaktiviert werden.
  • Verwaltetes C++ wird nicht unterstützt und sollte deaktiviert werden.
  • (C++ AMP) wird nicht unterstützt und sollte deaktiviert werden.
  • Universelle Windows-Plattform (UWP)-Anwendungen werden nicht unterstützt.
  • Sonderfalllistendateien werden nicht unterstützt.
  • MFC mit der optionalen alloc_dealloc_mismatch Laufzeitoption wird nicht unterstützt.

Standardbibliotheksunterstützung

Die MSVC-Standardbibliothek (STL) ist teilweise optimiert, um den AddressSanitizer zu verstehen und andere Prüfungen bereitzustellen. Weitere Informationen finden Sie unter Containerüberlauffehler.

Wenn Anmerkungen deaktiviert oder in Versionen ohne Unterstützung deaktiviert sind, identifizieren AddressSanitizer-Ausnahmen, die im STL-Code ausgelöst werden, weiterhin echte Fehler. Sie sind jedoch nicht so präzise wie sie sein könnten.

In diesem Beispiel wird das Fehlen von Genauigkeit und die Vorteile der Aktivierung von Anmerkungen 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);

    // In versions prior to 17.2, 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).
    // With 17.2 and later, MSVC ASan will raise a 'container-overflow' exception:
    // ==18364==ERROR: AddressSanitizer: container-overflow on address 0x1263cb8a0048 at pc 0x7ff6466411ab bp 0x005cf81ef7b0 sp 0x005cf81ef7b8
    v[10] = 1;

    // Regardless of version, 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 auf 10.0.14393 (RS1) und 10.0.21323 (Prerelease Insider Build) getestet. Melden Sie einen Fehler , wenn Probleme auftreten.

Speicherauslastung

Die AddressSanitizer-Laufzeit gibt arbeitsspeicher während der Ausführung nicht wieder auf das Betriebssystem zurück. Aus Sicht des Betriebssystems sieht es möglicherweise so aus, als ob es einen Speicherverlust gibt. Diese Entwurfsentscheidung ist beabsichtigt, sodass nicht alle erforderlichen Arbeitsspeicher im Vorfeld zugeordnet werden.

AddressSanitizer-Laufzeit-DLL-Speicherorte

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-Entwickler-Eingabeaufforderungen. Diese Dateien werden niemals in C:\Windows\System32 oder C:\Windows\SysWOW64.

Unterstützung für benutzerdefinierte Eigenschaftenblätter

Mit dem Eigenschaften-Manager-Fenster in der Visual Studio-IDE können Sie Ihren Projekten benutzerdefinierte .props Dateien hinzufügen. Obwohl die Enable Address Sanitizer-Eigenschaft (<EnableASAN>) angezeigt wird, berücksichtigt der Build es nicht. Das liegt daran, dass die benutzerdefinierten .props Dateien eingeschlossen Microsoft.cpp.propswerden, nach denen der <EnableASAN> Wert zum Festlegen anderer Eigenschaften verwendet wird.

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

Siehe auch

AddressSanitizer -Übersicht
AddressSanitizer Build- und Sprachreferenz
AddressSanitizer-Laufzeitreferenz
AddressSanitizer-Schattenbytes
AddressSanitizer-Cloud oder verteilte Tests
AddressSanitizer Debugger-Integration
Beispiele für AddressSanitizer-Fehler