Rozszerzona biblioteka funkcji programu Visual Studio AddressSanitizer (VCAsan)

Biblioteki VCAsan*.lib implementują rozszerzone funkcje środowiska IDE debugera w programie Visual Studio. Te funkcje umożliwiają środowisku IDE wyświetlanie błędów AddressSanitizer w sesjach debugowania na żywo lub offline przez zapisanie pliku zrzutu awaryjnego z metadanymi. Biblioteka jest połączona za każdym razem, gdy funkcja AddressSanitizer jest włączona przez kompilator MSVC.

Spis bibliotek VCAsan

Opcja środowiska uruchomieniowego Biblioteka linków VCAsan
/MT libvcasan.lib
/MD vcasan.lib
/MTd libvcasand.lib
/MDd vcasand.lib

Funkcje biblioteki VCAsan

Okno raportu o błędach rich AddressSanitizer w środowisku IDE programu Visual Studio

Biblioteka VCAsan rejestruje wywołanie zwrotne w środowisku uruchomieniowym AddressSanitizer przy użyciu funkcji __asan_set_error_report_callbackinterfejsu . Jeśli zostanie wygenerowany raport AddressSanitizer, to wywołanie zwrotne zostanie użyte do zgłoszenia wyjątku przechwyconego przez program Visual Studio. Program Visual Studio używa danych wyjątku do generowania komunikatu wyświetlanego użytkownikowi w środowisku IDE.

Uwaga

Biblioteka VCAsan rejestruje funkcję wywołania zwrotnego w środowisku uruchomieniowym AddressSanitizer. Jeśli kod wywołuje tę funkcję rejestracji po raz drugi, zastępuje rejestrację wywołania zwrotnego biblioteki VCAsan. Spowoduje to utratę całej integracji środowiska IDE programu Visual Studio. Powrócisz do domyślnego środowiska użytkownika środowiska IDE. Istnieje również możliwość utraty wywołania użytkownika, które rejestruje wywołanie zwrotne. Jeśli wystąpi dowolny problem, zgłoś usterkę.

Zapisywanie błędów addressSanitizer w nowym typie pliku zrzutu awaryjnego

Po połączeniu biblioteki VCAsan z plikiem wykonywalnym użytkownicy mogą umożliwić jej wygenerowanie zrzutu awaryjnego w czasie wykonywania. Następnie środowisko uruchomieniowe AddressSanitizer generuje plik zrzutu, gdy wystąpi zdiagnozowany błąd. Aby włączyć tę funkcję, użytkownik ustawia zmienną ASAN_SAVE_DUMPS środowiskową przy użyciu polecenia takiego jak ten:

set ASAN_SAVE_DUMPS=MyFileName.dmp

Plik musi mieć rozszerzenie, .dmp aby postępować zgodnie z konwencjami środowiska IDE programu Visual Studio. (Przed 17.7)

Oto, co się stanie po określeniu pliku zrzutu dla ASAN_SAVE_DUMPS: Jeśli błąd zostanie przechwycony przez środowisko uruchomieniowe AddressSanitizer, zapisuje plik zrzutu awaryjnego, który zawiera metadane skojarzone z błędem. Debuger w programie Visual Studio w wersji 16.9 lub nowszej może analizować metadane zapisane w pliku zrzutu. Można ustawić ASAN_SAVE_DUMPS dla poszczególnych testów, przechowywać te artefakty binarne, a następnie wyświetlać je w środowisku IDE z odpowiednim indeksowaniem źródłowym.

Program Visual Studio w wersji 17.7 lub nowszej obsługuje następujące elementy:

  • Ciągi cytowane są teraz poprawnie obsługiwane. W poprzednich wersjach w przypadku środowisk w programie Visual Studio lub w przypadku korzystania z programu PowerShell ustawienie zmiennej środowiskowej zawierającej cudzysłowy lub spacje nie może utworzyć oczekiwanego pliku zrzutu.

  • .dmp Gdy rozszerzenie jest jawnie określone (na przykład set ASAN_SAVE_DUMPS=MyDmp.dmp), program VCAsan używa go jawnie i nie doda skojarzonego identyfikatora procesu do nazwy pliku zrzutu.

  • .dmp Jeśli plik już istnieje o tej samej nazwie określonej ze zmiennej środowiskowej, VCAsan modyfikuje nazwę pliku w następujący sposób:

    • Dołącza liczbę do nazwy pliku w nawiasach. Na przykład Myfile (1).dmp.
    • Jeśli po kilku próbach dołączenia liczby w nawiasach nie można wygenerować unikatowej nazwy, plik zostanie zapisany w ścieżce tymczasowej %APPLOCAL% , którą program VCAsan będzie drukować. Na przykład C:\Users\~\AppData\Local\Temp\Dump.dmp.
    • Jeśli zapisywanie w ścieżce tymczasowej zakończy się niepowodzeniem, zostanie wyświetlony błąd diagnostyczny.

Zobacz też

AddressSanitizer — omówienie
Rozwiązywanie znanych problemów z programemSanitizer
Dokumentacja języka i kompilacji narzędzia AddressSanitizer
AddressSanitizer runtime reference (Dokumentacja środowiska uruchomieniowego AddressSanitizer)
Bajty w tle addressSanitizer
AddressSanitizer — chmura lub testowanie rozproszone
Przykłady błędów addressSanitizer