Bekende problemen met AddressSanitizer
Notitie
Stuur ons feedback over wat u in toekomstige releases wilt zien en fouten melden als u problemen ondervindt.
Incompatibele opties en functionaliteit
Deze opties en functionaliteit zijn niet compatibel met /fsanitize=address
en moeten worden uitgeschakeld of vermeden.
- De
/RTC
-opties zijn niet compatibel met AddressSanitizer en moeten worden uitgeschakeld. - incrementele koppeling niet wordt ondersteund en moet worden uitgeschakeld.
- bewerken en doorgaan niet wordt ondersteund en moet worden uitgeschakeld.
- Coroutines niet compatibel zijn met AddressSanitizer en hervatbare functies zijn vrijgesteld van instrumentatie.
- OpenMP- wordt niet ondersteund en moet worden uitgeschakeld.
- Managed C++ wordt niet ondersteund en moet worden uitgeschakeld.
- C++ AMP- wordt niet ondersteund en moet worden uitgeschakeld.
- UWP-toepassingen (Universal Windows Platform) worden niet ondersteund.
- speciale caselijst bestanden niet worden ondersteund.
-
MFC- met de optionele
alloc_dealloc_mismatch
runtimeoptie wordt niet ondersteund. -
_CrtDumpMemoryLeaks
wordt niet ondersteund en moet worden uitgeschakeld.
Standaardbibliotheekondersteuning
De MSVC-standaardbibliotheek (STL) is gedeeltelijk verlicht om inzicht te hebben in de AddressSanitizer en andere controles te bieden. Zie container-overloopfoutvoor meer informatie.
Wanneer aantekeningen zijn uitgeschakeld of in versies zonder ondersteuning, worden adresSanitizer-uitzonderingen die in STL-code worden gegenereerd, nog steeds echte fouten geïdentificeerd. Ze zijn echter niet zo nauwkeurig als ze zouden kunnen zijn.
In dit voorbeeld ziet u het gebrek aan precisie en de voordelen van het inschakelen van aantekeningen:
// 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-versies
Omdat er afhankelijkheden zijn met specifieke Windows-versies, is ondersteuning gericht op Windows 10. MSVC AddressSanitizer is getest op 10.0.14393 (RS1) en 10.0.21323 (prerelease insider build). een fout melden als u problemen ondervindt.
Geheugengebruik
De AddressSanitizer-runtime brengt tijdens de uitvoering geen geheugen vrij aan het besturingssysteem. Vanuit het oogpunt van het besturingssysteem kan het lijken alsof er een geheugenlek is. Deze ontwerpbeslissing is opzettelijk, zodat niet alle vereiste geheugen vooraf moet worden toegewezen.
DLL-locaties van AddressSanitizer-runtime
De clang_rt.asan*.dll
runtimebestanden worden geïnstalleerd naast de compilers in %VSINSTALLDIR%\VC\Tools\MSVC\<version>\bin\<host-arch>\<target-arch>\
. Deze locaties bevinden zich op het pad in foutopsporingssessies en in opdrachtprompts van Visual Studio-ontwikkelaars. Deze bestanden worden nooit in C:\Windows\System32
of C:\Windows\SysWOW64
geplaatst.
Ondersteuning voor aangepast eigenschappenvenster
Met het venster Property Manager in Visual Studio IDE kunt u aangepaste .props
-bestanden toevoegen aan uw projecten. Hoewel de eigenschap Adres opschoning inschakelen (<EnableASAN>
) wordt weergegeven, wordt deze niet door de build gehonoreerd. Dat komt doordat de aangepaste .props
-bestanden worden opgenomen na Microsoft.cpp.props
, die de <EnableASAN>
-waarde gebruikt om andere eigenschappen in te stellen.
Als tijdelijke oplossing kunt u een Directory.Build.props
-bestand maken in de hoofdmap van uw project om de eigenschap <EnableASAN>
te definiëren. Zie C++-builds aanpassenvoor meer informatie.
Zie ook
Overzicht van AddressSanitizer
AddressSanitizer-build- en taalreferenties
naslaginformatie over AddressSanitizer-runtime
addressSanitizer schaduwbytes
AddressSanitizer-cloud of gedistribueerde tests
integratie van AddressSanitizer-foutopsporingsprogramma's
voorbeelden van AddressSanitizer-fouten