AddressSanitizer — chmura lub testowanie rozproszone

Nie musisz debugować błędów AddressSanitizer, kiedy i gdzie występują. Skonfiguruj środowisko uruchomieniowe, aby utworzyć zrzut awaryjny, który przechowuje cały kontekst specyficzny dla elementu AddressSanitizer w przypadku wystąpienia błędu. Następnie wyślij ten zrzut awaryjny do innego komputera na potrzeby debugowania. Debugowanie w trybie offline może być krytycznym czasem działania narzędzia AddressSanitizer w chmurze lub w testowaniu rozproszonym. Zrzut można utworzyć w infrastrukturze testowej lub produkcyjnej, w której wystąpi awaria, i debugować go później na komputerze deweloperskim.

Debuger programu Visual Studio zawiera dokładnie zdiagnozowane błędy AddressSanitizer. Możesz wyświetlić te usterki bez konieczności ponownego uruchamiania testów, kopiowania ogromnych zestawów danych, odnajdywania utraconych danych lub znajdowania maszyn testowych, które przeszły w tryb offline. Wystarczy załadować zrzut awaryjny.

Zrzuty awaryjne są tworzone po awariach narzędzia AddressSanitizer, ustawiając następującą zmienną środowiskową:

set ASAN_SAVE_DUMPS=MyFileName.dmp

Uwaga

Nazwa pliku musi mieć sufiks .dmp , aby przestrzegać konwencji nazewnictwa programu Visual Studio.

Ten plik zrzutu może być wyświetlany przy użyciu programu Visual Studio w późniejszym terminie na innej maszynie.

Program Visual Studio może wyświetlać informacje o błędzie w kontekście oryginalnego kodu źródłowego. W tym celu program Visual Studio wymaga debugowania symboli i indeksowanego kodu źródłowego. Aby uzyskać najlepsze środowisko debugowania, pliki EXE, PDB i kod źródłowy używany do tworzenia tych plików binarnych muszą być zgodne.

Aby uzyskać więcej informacji na temat przechowywania źródeł i symboli, zobacz sekcję Źródło i symbole . Aby uzyskać informacje na temat szczegółów implementacji i szczegółowej kontroli, zobacz integracja debugera.

Przykład — kompilowanie, testowanie i analizowanie

Rozważ trzy maszyny: A, B i C. Kompilacje są wykonywane na maszynie B, testy są uruchamiane na maszynie C i analizujesz błędy na maszynie A. Błędy są zgłaszane względem numerów wierszy źródłowych i kolumn w kodzie źródłowym. Stos wywołań można zobaczyć wraz z zestawem symboli w pliku PDB utworzonym przy użyciu tej dokładnej wersji kodu źródłowego.

Poniższe kroki dotyczą scenariuszy lokalnych lub rozproszonych, które prowadzą do utworzenia pliku dmp i wyświetlania tego pliku zrzutu AddressSanitizer w trybie offline.

Tworzenie pliku .dmp lokalnie

  • Kompilacja
  • Testowanie pliku wykonywalnego
  • Kopiowanie wygenerowanego pliku dmp do katalogu kompilacji
  • Otwórz plik .dmp z sparowanym plikiem .pdb w tym samym katalogu

Tworzenie pliku dmp w systemie rozproszonym

Uwaga

Maszyna programu Visual Studio 2019 używana do analizy musi mieć dostęp do usługi GitHub lub wewnętrznej \\Machine\share lokalizacji, w której jest przechowywane indeksowane źródło.

Wyświetl pliki .dmp AddressSanitizer

  1. Upewnij się, że środowisko IDE debugera może znaleźć pliki PDB i źródłowe.

  2. Otwórz program Visual Studio i wybierz pozycję Kontynuuj bez kodu. Następnie wybierz pozycję Plik>Otwórz plik,>aby otworzyć okno dialogowe Otwieranie pliku. Upewnij się, że sufiks nazwy pliku to .dmp.

    Screenshot of the File Open File menu in Visual Studio.

    Pokazany tutaj ekran wymaga jeszcze jednego kroku, aby umożliwić dostęp środowiska IDE do symboli i źródeł.

  3. Ustaw ścieżki symboli, a następnie wybierz pozycję Debuguj tylko z natywnym.

    Screenshot of the Minidump Summary display in Visual Studio.

Ten zrzut ekranu przedstawia ostatni załadowany plik zrzutu ze źródłami i załadowanymi metadanymi AddressSanitizer.

Screenshot of the debugger showing source files and AddressSanitizer metadata.

Źródło i symbole

Serwer źródłowy umożliwia klientowi pobranie dokładnej wersji plików źródłowych używanych do kompilowania aplikacji. Kod źródłowy pliku wykonywalnego lub biblioteki DLL może ulec zmianie w czasie i między wersjami. Można go użyć do przyjrzenia się temu samemu kodowi źródłowemu, który utworzył określoną wersję aplikacji.

Podczas debugowania pliku EXE z plikiem PDB debuger może użyć osadzonego bloku danych serwera źródłowego, aby pobrać odpowiednie pliki z kontroli źródła. Ładuje pliki mapowane na w pełni kwalifikowane nazwy umieszczone w pliku PDB automatycznie przez opcję kompilatora /Zi .

Aby można było używać serwera źródłowego, aplikacja musi być "indeksowana źródłową" przy użyciu polecenia pdbstr.exe w celu zapisania srcsrv bloku danych w pliku PDB. Aby uzyskać więcej informacji, zobacz sekcję Blok danych serwera źródłowego i indeksowania źródłowego. Znajdziesz również kroki indeksowania źródeł i publikowania symboli oraz sposobu określania symboli i kodu źródłowego dla debugera.

Aby uzyskać dokumentację zewnętrzną, zobacz:

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
Integracja debugera AddressSanitizer
Przykłady błędów addressSanitizer