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.
/RTCMožnosti jsou nekompatibilní s AddressSanitizer a měly by být zakázané.- Přírůstkové propojování není podporováno a mělo by být zakázáno.
- Příkaz Upravit a pokračovat není podporován a měl by být zakázán.
- Korutiny jsou nekompatibilní s AddressSanitizer a obnovitelné funkce jsou vyloučené z instrumentace.
- OpenMP není podporován a měl by být zakázán.
- Spravovaný jazyk C++ není podporován a měl by být zakázán.
- C++ AMP není podporován a měl by být zakázán.
- aplikace Univerzální platforma Windows (UWP) nejsou podporovány.
- Soubory seznamu zvláštních případů nejsou podporovány.
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