AddressSanitizer známé problémy

Poznámka

Pošlete nám svůj názor na to, co byste chtěli vidět v budoucích verzích, a nahlásit chyby , pokud narazíte na problémy.

Nekompatibilní možnosti a funkce

Tyto možnosti a funkce jsou nekompatibilní se systémem /fsanitize=address a měly by být zakázané nebo zabráněno.

Podpora knihovny Standard

knihovna STL (MSVC standard library) není podporou pro pochopení AddressSanitizer. Výjimky AddressSanitizer vyvolané v kódu STL identifikují skutečné chyby. Nejsou ale tak přesné, jak by mohly být.

Tento příklad ukazuje nedostatek přesnosti:

// 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;
}

verze Windows

protože existují závislosti s konkrétními verzemi Windows, zaměřuje se podpora na Windows 10. MSVC AddressSanitizer byl testován na 10.0.14393 (RS1) a 10.0.21323 (předběžné vydání buildu insider). Oznamte chybu , pokud narazíte na problémy.

Využití paměti

Běhový modul AddressSanitizer neuvolní paměť při spuštění zpět do operačního systému. Z pohledu na operační systém může vypadat jako nevrácená paměť. Toto rozhodnutí o návrhu je úmyslné, takže nemusíte přidělovat veškerou požadovanou paměť předem.

Umístění knihoven DLL modulu runtime AddressSanitizer

clang_rt.asan*.dllBěhové soubory jsou nainstalovány vedle kompilátorů v nástroji %VSINSTALLDIR%\VC\Tools\MSVC\<version>\bin\<host-arch>\<target-arch>\ . tato umístění se nacházejí v cestě ladění a v Visual Studio výzvy pro vývojáře k příkazu. Tyto soubory nejsou nikdy umístěny v C:\Windows\System32 nebo C:\Windows\SysWOW64 .

Podpora seznamu vlastních vlastností

okno Správce vlastností v rozhraní IDE Visual Studio umožňuje přidat .props do svých projektů vlastní soubory. I když je zobrazená vlastnost Povolit úpravu adresy ( ), není tímto sestavením dodržena. Důvodem je to, že vlastní .props soubory se dostanou po Microsoft.cpp.props , což používá <EnableASAN> hodnotu k nastavení dalších vlastností.

Jako alternativní řešení můžete vytvořit Directory.Build.props soubor v kořenu projektu, abyste mohli definovat <EnableASAN> vlastnost. Další informace najdete v tématu přizpůsobení sestavení C++.

Viz také

AddressSanitizer – přehled
Reference k sestavení a jazyku AddressSanitizer
Referenční informace o modulu runtime AddressSanitizer
AddressSanitizer stínové bajty
AddressSanitizer Cloud nebo distribuované testování
Integrace ladicího programu AddressSanitizer
Příklady chyb AddressSanitizer