Konfigurowanie projektów systemu Linux do używania narzędzia Address Sanitizer

W programie Visual Studio 2019 w wersji 16.1 obsługa narzędzia AddressSanitizer (ASan) jest zintegrowana z projektami systemu Linux. Można włączyć usługę ASan zarówno dla projektów systemu Linux opartych na programie MSBuild, jak i projektów CMake. Działa on w zdalnych systemach Linux i na Podsystem Windows dla systemu Linux (WSL).

Informacje o usłudze ASan

ASan to narzędzie do wykrywania błędów pamięci środowiska uruchomieniowego dla języka C/C++, które przechwytuje następujące błędy:

  • Użyj po wolnym (odwołanie do wskaźnika zwisającego)
  • Przepełnienie buforu stert
  • Przepełnienie buforu stosu
  • Użyj po powrocie
  • Użyj po zakresie
  • Usterki kolejności inicjowania

Gdy usługa ASan wykryje błąd, natychmiast zatrzymuje wykonywanie. Jeśli uruchomisz program obsługujący usługę ASan w debugerze, zostanie wyświetlony komunikat opisujący typ błędu, adres pamięci i lokalizację w pliku źródłowym, w którym wystąpił błąd:

Zrzut ekranu przedstawiający komunikat o błędzie narzędzia do oczyszczania adresu: sterta jest używana po bezpłatnie.

Możesz również wyświetlić pełne dane wyjściowe ASan (w tym miejsce przydzielenia/cofnięcia przydziału uszkodzonej pamięci) w okienku Debugowanie okna danych wyjściowych.

Włączanie rozwiązania ASan dla projektów systemu Linux opartych na programie MSBuild

Uwaga

Począwszy od programu Visual Studio 2019 w wersji 16.4, narzędzie AddressSanitizer dla projektów systemu Linux jest włączone za pomocą >

Aby włączyć aplikację ASan dla projektów systemu Linux opartych na programie MSBuild, kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań i wybierz polecenie Właściwości. Następnie przejdź do pozycji Właściwości>konfiguracji C/C++>Sanitizers. Usługa ASan jest włączona za pomocą flag kompilatora i konsolidatora i wymaga ponownego skompilowania projektu.

Zrzut ekranu przedstawiający stronę właściwości projektu z wybranymi właściwościami > konfiguracji C/C i > sanitizerami. Włącz ustawienie Sanitizer adresu ma wartość Tak.

Opcjonalne flagi środowiska uruchomieniowego ASan można przekazać, przechodząc do >właściwości AddressSanitizer Runtime Flags. Kliknij strzałkę w dół, aby dodać lub usunąć flagi.

Zrzut ekranu przedstawiający stronę właściwości projektu z wybraną funkcją Debugowanie właściwości > konfiguracji. Flagi środowiska uruchomieniowego sanitizera adresów są detect_leaks = 0.

Włączanie aplikacji ASan dla projektów CMake programu Visual Studio

Uwaga

Aby skompilować przy użyciu ustawień wstępnych narzędzia CMake, najpierw włącz usługę ASan w pliku CMakeLists.txt. Aby uzyskać więcej informacji, zobacz Enable AddressSanitizer for Windows and Linux (Włączanie narzędzia AddressSanitizer dla systemów Windows i Linux).

Aby włączyć aplikację ASan dla narzędzia CMake, kliknij prawym przyciskiem myszy CMakeLists.txt plik w Eksplorator rozwiązań i wybierz pozycję Ustawienia narzędzia CMake dla projektu.

Upewnij się, że w lewym okienku okna dialogowego wybrano konfigurację systemu Linux (na przykład Linux-Debug):

Zrzut ekranu przedstawiający okienko Konfiguracje z okienkiem x64-Debugowanie i Debugowanie systemu Linux wymienione jako opcje.

Opcje ASan znajdują się w obszarze Ogólne. Wprowadź flagi środowiska uruchomieniowego ASan w formacie "flag=value", oddzielone spacjami. Interfejs użytkownika niepoprawnie sugeruje użycie średników. Użyj spacji lub dwukropków, aby oddzielić flagi.

Zrzut ekranu przedstawiający opcję Włącz sanitizer adresów z flagami czasu wykonywania sanitizera adresów, takimi jak detect_leaks=0.

Instalowanie symboli debugowania ASan

Aby włączyć diagnostykę ASan, należy zainstalować jego symbole debugowania (libasan-dbg) na zdalnej maszynie z systemem Linux lub instalacji WSL. Wersja biblioteki libasan-dbg, która jest ładowana, zależy od wersji biblioteki GCC zainstalowanej na komputerze z systemem Linux:

Wersja rozwiązania ASan Wersja GCC
libasan0 gcc-4.8
libasan2 gcc-5
libasan3 gcc-6
libasan4 gcc-7
libasan5 gcc-8

Możesz określić, która wersja GCC jest używana za pomocą tego polecenia:

gcc --version

Aby wyświetlić potrzebną wersję biblioteki libasan-dbg, uruchom program, a następnie przyjrzyj się okienku Debugowanie w oknie Dane wyjściowe. Załadowana wersja rozwiązania ASan odpowiada wersji biblioteki libasan-dbg wymaganej na maszynie z systemem Linux. Możesz użyć Ctrl + F , aby wyszukać frazę "libasan" w oknie. Jeśli na przykład masz bibliotekę libasan4, zobaczysz wiersz podobny do następującego:

Loaded '/usr/lib/x86_64-linux-gnu/libasan.so.4'. Symbols loaded.

Bity debugowania ASan można zainstalować w dystrybucjach systemu Linux, które używają narzędzia apt za pomocą następującego polecenia. To polecenie instaluje wersję 4:

sudo apt-get install libasan4-dbg

Pełne instrukcje dotyczące instalowania pakietów symboli debugowania w systemie Ubuntu można znaleźć w artykule Debugowanie pakietów symboli.

Jeśli aplikacja ASan jest włączona, program Visual Studio wyświetli monit w górnej części okienka Debugowanie okna Dane wyjściowe, aby zainstalować symbole debugowania ASan.