/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:ruleset
ruleset_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.dll
polecenie , użyj opcji /analyze:plugin LocalEspC.dll
kompilatora .
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.dll
CppCoreCheck.dll
, HResultCheck.dll
i 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. Na 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:I
Użyj opcji , /external:env
lub/external:anglebrackets
, aby określić katalogi jako katalogi "zewnętrzne". Wszystkie pliki dołączone przy użyciu #include
z 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_directory
elemencie . Jeśli nie zostanie znaleziona, następnie przeszukuje ruleset_directories
określony przez /analyze:rulesetdirectory
element , 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
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).
Wybierz stronę Właściwości>konfiguracji Analiza>kodu Ogólne właściwości.
Zmodyfikuj co najmniej jedną właściwości analizy kodu.
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:
Otwórz okno dialogowe Strony właściwości projektu.
Wybierz stronę Właściwości>konfiguracji C/C++>External Includes.
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ę .
Wybierz przycisk OK lub Zastosuj , aby zapisać zmiany.
Aby programowo ustawić tę opcję kompilatora
- Zobacz: EnablePREfast.
Zobacz też
Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC