/analyze (Analiza kodu)

Włącza opcje analizy kodu i kontroli.

Składnia

Opcje analizy ogólnej:

/analyze[-]
/analyze:only
/analyze:quiet
/analyze:max_paths number
/analyze:stacksize number
/analyze:WX-

Opcje wtyczki analizy:

/analyze:plugin plugin_dll

Opcje analizy plików zewnętrznych:

/analyze:external-
/analyze:external:ruleset ruleset_files

Opcje dziennika analizy:

/analyze:autolog[-]
/analyze:autolog:ext extension
/analyze:log log_path

Opcje formatu pliku dziennika:

/analyze:log:format:sarif
/analyze:log:format:xml

Opcje zawartości pliku dziennika:

/analyze:sarif:analyzedfiles[-]
/analyze:sarif:configuration[-]
/analyze:log:compilerwarnings
/analyze:log:includesuppressed

Opcje zestawu reguł:

/analyze:rulesetruleset_file

Opcje zestawu reguł:

/analyze:projectdirectory project_directory
/analyze:rulesetdirectory ruleset_directories
/analyze:ruleset ruleset_files

Argumenty

Opcje analizy ogólnej

/analyze[-]
Włącza analizę kodu. Użyj polecenia /analyze- , aby jawnie wyłączyć analizę. /analyze- jest zachowaniem domyślnym.

Domyślnie dane wyjściowe analizy są przekazywane do konsoli lub okna danych wyjściowych programu Visual Studio, podobnie jak inne komunikaty o błędach. Analiza kodu tworzy również plik dziennika o nazwie filename.nativecodeanalysis.xml, gdzie filename jest nazwą przeanalizowanego pliku źródłowego.

/analyze:only
Domyślnie kompilator kompiluje kod, aby wygenerować pliki obiektów przed uruchomieniem analizy kodu. Opcja /analyze:only powoduje, że kompilator pomija przekazywanie generowania kodu i wykonuje analizę kodu bezpośrednio. Błędy kompilatora nadal uniemożliwiają uruchomienie analizy kodu. Jednak kompilator nie zgłosi innych ostrzeżeń, które mogą znajdować się podczas przekazywania kodu. Jeśli program nie jest wolny od ostrzeżeń generowania kodu, wyniki analizy mogą być zawodne. Zalecamy użycie tej opcji tylko wtedy, gdy kod przechodzi testy składni generowania kodu bez błędów lub ostrzeżeń.

/analyze:quiet
Wyłącza dane wyjściowe analizy w konsoli lub w oknie Danych wyjściowych programu Visual Studio.

/analyze:max_paths number
Parametr number określa maksymalną liczbę ścieżek kodu do analizy. Domyślnie analiza to 256 ścieżek. Większe wartości powodują dokładniejsze sprawdzanie, ale analiza może trwać dłużej.

/analyze:stacksize number
Parametr number określa rozmiar w bajtach ramki stosu, który generuje ostrzeżenie C6262. Domyślny rozmiar ramki stosu to 16 KB.

/analyze:WX-
Informuje kompilator, aby nie traktować ostrzeżeń analizy kodu jako błędów nawet wtedy, gdy /WX jest używana opcja. Aby uzyskać więcej informacji, zobacz /WX (poziom ostrzeżenia).

Opcje wtyczki analizy

/analyze:plugin plugin_dll
Włącza określoną bibliotekę DLL analizy kodu na potrzeby analizy kodu.

Odstęp między /analyze:plugin i ścieżką plugin_dll pliku jest opcjonalny, jeśli ścieżka nie wymaga podwójnych cudzysłowów ("). Możesz na przykład napisać polecenie /analyze:plugin EspxEngine.dll. Jeśli jednak ścieżka jest ujęta w cudzysłowy, nie można mieć spacji między /analyze:plugin ścieżką pliku a ścieżką pliku. Oto przykład: /analyze:plugin"c:\path\to\EspxEngine.dll".

Aparat analizy kodu używa wtyczek do znajdowania określonych kategorii wad. Aparat analizy kodu zawiera wbudowane wtyczki, które wykrywają różne wady. Aby użyć innej wtyczki z aparatem analizy kodu, określ ją przy użyciu /analyze:plugin opcji .

Wtyczka LocalEspC.dll implementuje testy analizy związane ze współbieżnością. Te kontrole wywołują ostrzeżenia w zakresie C261XX, takich jak C26100 do C26167.

Aby załadować LocalEspC.dllpolecenie , użyj opcji /analyze:plugin LocalEspC.dllkompilatora .

Niektóre wtyczki, takie jak EspXEngine.dll, dostarczane z programem Visual Studio, korzystają z rozszerzeń, które mogą wykonywać dalszą analizę. Program Visual Studio obejmuje te rozszerzenia dla espXEngine: ConcurrencyCheck.dll, , EnumIndex.dllCppCoreCheck.dll, HResultCheck.dlli VariantClear.dll. Sprawdzają wady pod kątem problemów ze współbieżnością, naruszeń CppCoreGuidelines, nieodpowiednich enum zastosowań wartości jako indeksów, HRESULT wartości lub VARIANT wartości odpowiednio.

Podczas kompilowania w wierszu polecenia można użyć zmiennej środowiskowej Esp.Extensions do określenia rozszerzeń EspXEngine. Przykład:

set Esp.Extensions=ConcurrencyCheck.dll;CppCoreCheck.dll;

Użyj średnika (;), aby rozdzielić rozszerzenia, jak pokazano w przykładzie. Średnik końcowy nie jest potrzebny. Można użyć bezwzględnej ścieżki pliku dla rozszerzenia lub określić ścieżkę względną z katalogu zawierającego EspXEngine.dll.

Wtyczka EspXEngine.dll używa ConcurrencyCheck.dll metody do implementowania kontroli analizy kodu związanego ze współbieżnością. Te kontrole wywołują ostrzeżenia w zakresie C261XX, takich jak C26100 do C26167.

Jeśli tworzysz w oknie wiersza polecenia dewelopera, najpierw ustaw zmienną Esp.Extensions środowiskową, aby określić ConcurrencyCheck.dll rozszerzenie:

set Esp.Extensions=ConcurrencyCheck.dll

Następnie użyj opcji /analyze:plugin EspXEngine.dll kompilatora, aby użyć wtyczki EspXEngine.

Opcje analizy plików zewnętrznych

Począwszy od programu Visual Studio 2019 w wersji 16.10, można określić różne reguły analizy i zachowanie nagłówków zewnętrznych. /external:IUżyj opcji , /external:envlub/external:anglebrackets, aby określić katalogi jako katalogi "zewnętrzne". Wszystkie pliki dołączone przy użyciu #includez katalogu zewnętrznego lub jego podkatalogów są traktowane jako nagłówki zewnętrzne. Aby uzyskać więcej informacji, zobacz /external (diagnostyka nagłówków zewnętrznych).

Analiza kodu zapewnia następujące opcje kontrolowania analizy plików zewnętrznych:

/analyze:external-
Pomija analizę plików nagłówków zewnętrznych. Domyślnie analiza kodu analizuje pliki nagłówków zewnętrznych tak samo jak inne pliki. Po ustawieniu /analyze:external- opcji analiza kodu pomija wszystkie pliki określone jako zewnętrzne, z wyjątkiem szablonów z plików zewnętrznych. Szablony zdefiniowane w nagłówkach zewnętrznych są traktowane jako inne niż zewnętrzne przy użyciu /external:templates- opcji . Opcja /external:Wn nie ma wpływu na analizę kodu. Na przykład analiza kodu analizuje pliki zewnętrzne i zgłasza wady nawet wtedy, gdy /external:W0 jest określony.

/analyze:external:ruleset ruleset_files
Parametr ruleset_files określa co najmniej jeden plik zestawu reguł rozdzielanych średnikami do użycia do analizy plików zewnętrznych. Aby uzyskać informacje na temat zestawów reguł, zapoznaj się z sekcją "Opcje dla zestawów reguł".

Istnieje zmienna środowiskowa (CAExcludePath), która zapewnia podobną, ale prostszą możliwość pomijania analizy plików w katalogach określonych w zmiennej środowiskowej. Jeśli katalog jest określony zarówno w /external:* opcji, jak i w zmiennej CAExcludePath środowiskowej, jest uważany za wykluczony, a /analyze:external* opcje nie będą stosowane do tego katalogu.

Opcje dziennika analizy

/analyze:autolog[-]
Ta flaga była wymagana do włączenia tworzenia pliku dziennika analizy dla każdego analizowanego pliku źródłowego. Pliki dziennika są domyślnie tworzone, więc ta flaga jest w większości nadmiarowa. W przypadku użycia zmienia domyślne rozszerzenie dziennika na *.pftlog zamiast .xml. Użyj /analyze:autolog- polecenia , aby wyłączyć rejestrowanie w plikach.

/analyze:autolog:ext extension
Zastępuje domyślne rozszerzenie plików dziennika analizy i używa extension zamiast tego. Jeśli używasz .sarif rozszerzenia, plik dziennika używa formatu SARIF zamiast domyślnego formatu XML.

/analyze:log log_path
Określa ścieżkę log_path pliku dziennika zamiast automatycznie wygenerowanej ścieżki pliku dziennika. log_path Gdy ścieżka ma końcowy ukośnik odwrotny i odwołuje się do istniejącego katalogu, analiza kodu tworzy wszystkie pliki dziennika w określonym katalogu. log_path W przeciwnym razie określa ścieżkę pliku. Ścieżka pliku instruuje kompilator, aby połączyć dzienniki dla wszystkich przeanalizowanych plików źródłowych w określonym pliku dziennika. Jeśli ścieżka pliku ma .sarif rozszerzenie, plik dziennika używa formatu SARIF zamiast domyślnego formatu XML. To zachowanie można zastąpić przy użyciu /analyze:log:format:* opcji .

Opcje formatu pliku dziennika

Począwszy od programu Visual Studio 2019 w wersji 16.9, można określić różne opcje formatu dziennika na potrzeby analizy kodu.

/analyze:log:format:xml
Wymusza użycie formatu dziennika XML bez znaczenia używanego rozszerzenia pliku.

/analyze:log:format:sarif
Wymusza użycie formatu dziennika SARIF bez znaczenia używanego rozszerzenia pliku.

Opcje zawartości pliku dziennika

Począwszy od programu Visual Studio 2019 w wersji 16.9, można określić różne opcje zawartości dziennika na potrzeby analizy kodu.

/analyze:sarif:analyzedfiles[-]
Dodaje wpisy artefaktów plików do pliku dziennika SARIF dla przeanalizowanych plików, które nie wystawiają ostrzeżeń. Ta opcja jest domyślnie wyłączona. Artefakty dla pliku źródłowego i plików, które emitowane wyniki są zawsze uwzględniane.

/analyze:sarif:configuration[-]
Dodaje wpisy konfiguracji reguły, aby określić, jak użytkownik zastąpi domyślną konfigurację reguły (domyślnie wyłączone).

/analyze:log:compilerwarnings
Dodaje zarówno wszystkie wady aparatu analizy, jak i wszystkie ostrzeżenia kompilatora do pliku dziennika analizy. Domyślnie ostrzeżenia kompilatora nie są uwzględniane w pliku dziennika analizy. Aby uzyskać więcej informacji na temat ostrzeżeń kompilatora podczas analizy kodu, zobacz /analyze:only opcję .

/analyze:log:includesuppressed
Dodaje zarówno pominięte ostrzeżenia, jak i nieskompresowane ostrzeżenia do pliku dziennika analizy. Domyślnie pominięte ostrzeżenia nie są uwzględniane w pliku dziennika analizy. Jeśli pliki zestawu reguł są określone do analizy, ostrzeżenia wyłączone przez pliki zestawu reguł nie są uwzględniane w dzienniku nawet wtedy, gdy /analyze:log:includesuppressed jest określony.

Opcje zestawu reguł

/analyze:projectdirectory project_directory
Określa bieżący katalog projektu. Jeśli zestaw reguł (lub element, który zawiera) jest nazwą pliku, kompilator najpierw wyszukuje plik w określonym project_directoryelemencie . Jeśli nie zostanie znaleziona, następnie przeszukuje ruleset_directories określony przez /analyze:rulesetdirectoryelement , jeśli istnieje. Jeśli zestaw reguł (lub element, który zawiera) jest ścieżką względną, kompilator najpierw szuka pliku w katalogu projektu. Jeśli zestaw reguł nie zostanie znaleziony, będzie on wyglądał w bieżącym katalogu roboczym. Ta opcja jest dostępna od wersji 16.9 programu Visual Studio 2019.

/analyze:rulesetdirectory ruleset_directories
Określa rozdzieloną średnikami listę ścieżek wyszukiwania zestawu reguł. Jeśli zestaw reguł (lub element, który zawiera) jest nazwą pliku, kompilator najpierw wyszukuje plik w project_directory określonym przez /analyze:projectdirectory, jeśli istnieje, a następnie określony ruleset_directories. Ta opcja jest dostępna od wersji 16.9 programu Visual Studio 2019.

/analyze:ruleset ruleset_files
Określa co najmniej jeden plik zestawu reguł do użycia na potrzeby analizy. Ta opcja może zwiększyć wydajność analizy; aparat analizy próbuje wykluczyć kontrolery, które nie mają aktywnych reguł określonych w plikach zestawu reguł przed uruchomieniem. W przeciwnym razie aparat uruchamia wszystkie włączone kontrolery.

/analyze:ruleset ruleset_file
Określa plik zestawu reguł do użycia do analizy. Ta opcja może zwiększyć wydajność analizy; aparat analizy próbuje wykluczyć kontrolery, które nie mają aktywnych reguł określonych w pliku zestawu reguł przed uruchomieniem. W przeciwnym razie aparat uruchamia wszystkie włączone kontrolery.

Pliki zestawu reguł dostarczane z programem Visual Studio znajdują się w pliku %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets.

Poniższy przykładowy niestandardowy zestaw reguł informuje aparat analizy o sprawdzaniu pod kątem C6001 i C26494 i zgłaszania ich jako ostrzeżeń.

Możesz umieścić ten plik w dowolnym miejscu, o ile określisz pełną ścieżkę w argumencie.

Ten plik można umieścić w dowolnym miejscu, o ile określisz pełną ścieżkę w argumencie lub w katalogach określonych w /analyze:projectdirectory opcjach lub /analyze:rulesetdirectory .

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description="New rules to apply." ToolsVersion="15.0">
  <Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
    <Rule Id="C6001" Action="Warning" />
    <Rule Id="C26494" Action="Warning" />
  </Rules>
</RuleSet>

Domyślnie rozszerzenie pliku dla plików zestawu reguł to *.ruleset. Program Visual Studio używa domyślnego rozszerzenia podczas przeglądania plików zestawu reguł. Można jednak użyć dowolnego rozszerzenia.

Aby uzyskać więcej informacji na temat zestawów reguł, zobacz Używanie zestawów reguł w celu określenia reguł języka C++, które mają być uruchamiane.

Uwagi

Aby uzyskać więcej informacji, zobacz Omówienie kodu dla języka C/C++ i Analiza kodu dla ostrzeżeń języka C/C++.

Aby ustawić tę opcję kompilatora w środowisku programowania Visual Studio

  1. Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilowania w programie Visual Studio).

  2. Wybierz stronę Właściwości>konfiguracji Analiza>kodu Ogólne właściwości.

  3. Zmodyfikuj co najmniej jedną właściwości analizy kodu.

  4. Wybierz przycisk OK lub Zastosuj , aby zapisać zmiany.

Aby ustawić opcje analizy plików zewnętrznych w programie Visual Studio 2019 w wersji 16.10 lub nowszej:

  1. Otwórz okno dialogowe Strony właściwości projektu.

  2. Wybierz stronę Właściwości>konfiguracji C/C++>External Includes.

  3. Ustaw właściwości:

    • Wyłącz analizę kodu dla nagłówków zewnętrznych ustawia /analyze:external- opcję .

    • Zestaw reguł analizy dla nagłówków zewnętrznych ustawia /analyze:external:ruleset path opcję .

  4. Wybierz przycisk OK lub Zastosuj , aby zapisać zmiany.

Aby programowo ustawić tę opcję kompilatora

  1. Zobacz: EnablePREfast.

Zobacz też

Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC