Bekannte Probleme von AddressSanitizer

Hinweis

Senden Sie uns Feedback darüber, was Sie in zukünftigen Versionen sehen möchten, und melden Sie Fehler , wenn Sie Probleme haben.

Inkompatible Optionen und Funktionen

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

  • Die /RTC-Optionen sind mit AddressSanitizer nicht kompatibel und sollten deaktiviert werden.
  • Die inkrementelle Verknüpfung ist 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 ist nicht unterstützt und sollte deaktiviert werden.
  • Verwaltete C++ ist 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.

Standardbibliotheksunterstützung

Die MSVC Standardbibliothek (STL) wird teilweise aufgeklärt, um den AddressSanitizer zu verstehen und zusätzliche Überprüfungen bereitzustellen. Weitere Informationen finden Sie unter Containerüberlauffehler.

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

In diesem Beispiel wird der Mangel an Genauigkeit und den Vorteilen 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 (Pre-Release Insider Build) getestet. Melden Sie einen Fehler , wenn Probleme auftreten.

Speicherauslastung

Die AddressSanitizer-Laufzeit gibt den Arbeitsspeicher während der Ausführung nicht wieder auf das Betriebssystem zurück. Aus der Sicht des Betriebssystems sieht es möglicherweise aus, wie es ein Speicherleck gibt. Diese Entwurfsentscheidung ist absichtlich, sodass nicht alle erforderlichen Speicher vor dem Start zugewiesen werden sollen.

AddressSanitizer-Runtime-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 Entwicklerbefehlsaufforderungen. Diese Dateien werden nie in oder C:\Windows\SysWOW64.C:\Windows\System32

Unterstützung des benutzerdefinierten Eigenschaftenblatts

Das Eigenschafts-Manager-Fenster in der Visual Studio IDE ermöglicht ihnen das Hinzufügen benutzerdefinierter .props Dateien zu Ihren Projekten. Obwohl die Eigenschaft "Address Sanitizer aktivieren " (<EnableASAN>) angezeigt wird, wird sie vom Build nicht ausgezeichnet. Das liegt daran, dass die benutzerdefinierten .props Dateien nach Microsoft.cpp.propsdem enthalten werden, was den <EnableASAN> Wert verwendet, um andere Eigenschaften festzulegen.

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

Weitere Informationen

Ü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