/analyze (Analisi del codice)

Abilita le opzioni di controllo e analisi del codice.

Sintassi

Opzioni generali di analisi:

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

Opzioni del plug-in di analisi:

/analyze:plugin plugin_dll

Opzioni di analisi dei file esterni:

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

Opzioni del log di analisi:

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

Opzioni di formato file di log:

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

Opzioni di contenuto del file di log:

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

Opzioni del set di regole:

/analyze:rulesetruleset_file

Opzioni del set di regole:

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

Argomenti

Opzioni generali di analisi

/analyze[-]
Attiva l'analisi del codice. Usare /analyze- per disattivare in modo esplicito l'analisi. /analyze- è il comportamento predefinito.

Per impostazione predefinita, l'output dell'analisi passa alla console o alla finestra Output di Visual Studio, come altri messaggi di errore. L'analisi del codice crea anche un file di log denominato filename.nativecodeanalysis.xml, dove filename è il nome del file di origine analizzato.

/analyze:only
Per impostazione predefinita, il compilatore compila il codice per generare file oggetto prima dell'esecuzione dell'analisi del codice. L'opzione /analyze:only consente al compilatore di ignorare il passaggio della generazione del codice ed esegue direttamente l'analisi del codice. Gli errori del compilatore impediscono comunque l'esecuzione dell'analisi del codice. Tuttavia, il compilatore non segnalerà altri avvisi che potrebbero essere presenti durante il passaggio di generazione del codice. Se il programma non è privo di avvisi di generazione del codice, i risultati dell'analisi potrebbero non essere affidabili. È consigliabile usare questa opzione solo se il codice supera i controlli della sintassi di generazione del codice senza errori o avvisi.

/analyze:quiet
Disattiva l'output dell'analisi nella console o nella finestra Output di Visual Studio.

/analyze:max_paths number
Il number parametro specifica il numero massimo di percorsi di codice da analizzare. L'analisi ha un valore predefinito di 256 percorsi. I valori più grandi causano un controllo più approfondito, ma l'analisi potrebbe richiedere più tempo.

/analyze:stacksize number
Il number parametro specifica le dimensioni in byte del frame dello stack che genera l'avviso C6262. Le dimensioni predefinite dello stack frame sono di 16 KB.

/analyze:WX-
Indica al compilatore di non considerare gli avvisi di analisi del codice come errori anche quando viene usata l'opzione /WX . Per altre informazioni, vedere /WX (livello di avviso).

Opzioni del plug-in di analisi

/analyze:plugin plugin_dll
Abilita la DLL del plug-in di analisi del codice specificata per l'analisi del codice.

Lo spazio tra /analyze:plugin e il percorso del plugin_dll file è facoltativo se il percorso non richiede virgolette doppie ("). Ad esempio, è possibile scrivere /analyze:plugin EspxEngine.dll. Tuttavia, se il percorso è racchiuso tra virgolette doppie, non è possibile avere uno spazio tra /analyze:plugin e il percorso del file. Ecco un esempio: /analyze:plugin"c:\path\to\EspxEngine.dll".

Il motore di analisi del codice usa plug-in per individuare categorie specifiche di difetti. Il motore di analisi del codice include alcuni plug-in predefiniti che rilevano vari difetti. Per usare un altro plug-in con il motore di analisi del codice, specificarlo usando l'opzione /analyze:plugin .

Il plug-in LocalEspC.dll implementa controlli di analisi correlati alla concorrenza. Questi controlli generano avvisi nell'intervallo C261XX, ad esempio da C26100 a C26167.

Per caricare LocalEspC.dll, usare l'opzione /analyze:plugin LocalEspC.dlldel compilatore .

Alcuni plug-in, ad esempio EspXEngine.dll, inclusi in Visual Studio, usano estensioni che possono eseguire ulteriori analisi. Visual Studio include queste estensioni per EspXEngine: ConcurrencyCheck.dll, CppCoreCheck.dll, EnumIndex.dllHResultCheck.dll, e VariantClear.dll. Controllano la presenza di difetti per problemi di concorrenza, violazioni di CppCoreGuidelines, usi non appropriati di enum valori come indici, HRESULT valori o VARIANT valori, rispettivamente.

Quando si esegue la compilazione sulla riga di comando, è possibile usare la Esp.Extensions variabile di ambiente per specificare le estensioni EspXEngine. Ad esempio:

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

Usare un punto e virgola (;) per delimitare le estensioni, come illustrato nell'esempio. Non è necessario un punto e virgola finale. È possibile usare un percorso di file assoluto per un'estensione o specificare un percorso relativo dalla directory che contiene EspXEngine.dll.

Il EspXEngine.dll plug-in usa ConcurrencyCheck.dll per implementare controlli di analisi del codice correlati alla concorrenza. Questi controlli generano avvisi nell'intervallo C261XX, ad esempio da C26100 a C26167.

Se si esegue la compilazione in una finestra del prompt dei comandi per gli sviluppatori, impostare prima di tutto la Esp.Extensions variabile di ambiente per specificare l'estensione ConcurrencyCheck.dll :

set Esp.Extensions=ConcurrencyCheck.dll

Usare quindi l'opzione /analyze:plugin EspXEngine.dll del compilatore per usare il plug-in EspXEngine.

Opzioni di analisi dei file esterni

A partire da Visual Studio 2019 versione 16.10, è possibile specificare regole di analisi e comportamento diverse per le intestazioni esterne. Usare le /external:Iopzioni , /external:envo /external:anglebrackets per specificare le directory come directory "esterne". Tutti i file inclusi usando #includeda una directory esterna o le relative sottodirectory vengono considerati come intestazioni esterne. Per altre informazioni, vedere (Diagnostica intestazioni esterne).For more information, see /external (External headers diagnostics).

L'analisi del codice offre queste opzioni per controllare l'analisi dei file esterni:

/analyze:external-
Ignora l'analisi dei file di intestazione esterni. Per impostazione predefinita, l'analisi del codice analizza i file di intestazione esterni esattamente come gli altri file. Quando l'opzione /analyze:external- è impostata, l'analisi del codice ignora tutti i file specificati come esterni, ad eccezione dei modelli di file esterni. I modelli definiti nelle intestazioni esterne vengono considerati non esterni usando l'opzione /external:templates- . L'opzione /external:Wn non influisce sull'analisi del codice. Ad esempio, l'analisi del codice analizza i file esterni e segnala i difetti anche quando /external:W0 viene specificato.

/analyze:external:ruleset ruleset_files
Il ruleset_files parametro specifica uno o più file di set di regole delimitati da punto e virgola da usare per l'analisi di file esterni. Per informazioni sui set di regole, vedere la sezione "Opzioni per i set di regole".

Esiste una variabile di ambiente (CAExcludePath) che offre funzionalità simili ma più semplici per ignorare l'analisi dei file nelle directory specificate nella variabile di ambiente. Se una directory viene specificata sia nell'opzione /external:* che nella CAExcludePath variabile di ambiente, viene considerata come esclusa e /analyze:external* le opzioni non si applicano a tale directory.

Opzioni del log di analisi

/analyze:autolog[-]
Questo flag utilizzato per consentire la creazione di un file di log di analisi per ognuno dei file di origine da analizzare. I file di log vengono ora creati per impostazione predefinita, quindi questo flag è principalmente ridondante. Se usata, viene modificata l'estensione *.pftlog del log predefinita in anziché .xmlin . Usare /analyze:autolog- per disabilitare la registrazione nei file.

/analyze:autolog:ext extension
Esegue l'override dell'estensione predefinita dei file di log di analisi e usa extension invece. Se si usa l'estensione .sarif , il file di log usa il formato SARIF anziché il formato XML predefinito.

/analyze:log log_path
Specifica un percorso log_path del file di log anziché il percorso del file di log generato automaticamente. Quando il log_path percorso ha una barra rovesciata finale e fa riferimento a una directory esistente, l'analisi del codice crea tutti i file di log nella directory specificata. In caso contrario, log_path specifica un percorso di file. Un percorso di file indica al compilatore di combinare i log per tutti i file di origine analizzati nel file di log specificato. Se il percorso del file ha un'estensione .sarif , il file di log usa il formato SARIF anziché il formato XML predefinito. È possibile sostituire questo comportamento usando l'opzione /analyze:log:format:*.

Opzioni di formato file di log

A partire da Visual Studio 2019 versione 16.9, è possibile specificare diverse opzioni di formato di log per l'analisi del codice.

/analyze:log:format:xml
Forza l'uso del formato di log XML irrilevante dell'estensione di file utilizzata.

/analyze:log:format:sarif
Forza l'uso del formato di log SARIF irrilevante dell'estensione di file usata.

Opzioni di contenuto del file di log

A partire da Visual Studio 2019 versione 16.9, è possibile specificare diverse opzioni di contenuto del log per l'analisi del codice.

/analyze:sarif:analyzedfiles[-]
Aggiunge voci di artefatti di file al file di log SARIF per i file analizzati che non generano avvisi. L'opzione è disabilitata per impostazione predefinita. Gli artefatti per il file di origine e per i file generati vengono sempre inclusi.

/analyze:sarif:configuration[-]
Aggiunge voci di configurazione delle regole per determinare il modo in cui l'utente esegue l'overrode della configurazione predefinita della regola (disabilitata per impostazione predefinita).

/analyze:log:compilerwarnings
Aggiunge tutti gli eventuali difetti rilevati dal motore di analisi e tutti gli avvisi del compilatore al file di log di analisi. Per impostazione predefinita, gli avvisi del compilatore non sono inclusi nel file di log di analisi. Per altre informazioni sugli avvisi del compilatore durante l'analisi del codice, vedere l'opzione /analyze:only .

/analyze:log:includesuppressed
Aggiunge avvisi eliminati e avvisi non compressi al file di log di analisi. Per impostazione predefinita, gli avvisi eliminati non sono inclusi nel file di log di analisi. Se i file del set di regole vengono specificati per l'analisi, gli avvisi disabilitati dai file del set di regole non vengono inclusi nel log anche quando /analyze:log:includesuppressed viene specificato.

Opzioni del set di regole

/analyze:projectdirectory project_directory
Specifica la directory del progetto corrente. Se il set di regole (o un elemento incluso) è un nome di file, il compilatore cerca innanzitutto il file sotto l'oggetto specificato project_directory. Se non viene trovato, esegue una ricerca successiva nell'oggetto ruleset_directories specificato da /analyze:rulesetdirectory, se presente. Se il set di regole (o un elemento incluso) è un percorso relativo, il compilatore cerca innanzitutto il file nella directory del progetto. Se il set di regole non viene trovato, cerca nella directory di lavoro corrente. Questa opzione è disponibile a partire da Visual Studio 2019 versione 16.9.

/analyze:rulesetdirectory ruleset_directories
Specifica un elenco delimitato da punto e virgola dei percorsi di ricerca del set di regole. Se il set di regole (o un elemento incluso) è un nome di file, il compilatore cerca innanzitutto il file nell'oggetto project_directory specificato da /analyze:projectdirectory, se presente, seguito dall'oggetto specificato ruleset_directories. Questa opzione è disponibile a partire da Visual Studio 2019 versione 16.9.

/analyze:ruleset ruleset_files
Specifica uno o più file del set di regole da usare per l'analisi. Questa opzione può rendere l'analisi più efficiente; Il motore di analisi tenta di escludere controlli che non dispongono di regole attive specificate nei file del set di regole prima dell'esecuzione. In caso contrario, il motore esegue tutti i controlli abilitati.

/analyze:ruleset ruleset_file
Specifica un file del set di regole da utilizzare per l'analisi. Questa opzione può rendere l'analisi più efficiente; Il motore di analisi tenta di escludere controlli che non dispongono di regole attive specificate nel file del set di regole prima dell'esecuzione. In caso contrario, il motore esegue tutti i controlli abilitati.

I file del set di regole forniti con Visual Studio sono disponibili in %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets.

Il set di regole personalizzato di esempio seguente indica al motore di analisi di verificare la presenza di C6001 e C26494 e segnalarli come avvisi.

È possibile posizionare il file in qualsiasi punto, purché si specifichi il percorso completo nell'argomento.

È possibile posizionare il file ovunque, purché si specifichi il percorso completo nell'argomento o nelle directory specificate nelle /analyze:projectdirectory opzioni o /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>

Per impostazione predefinita, l'estensione di file per i file del set di regole è *.ruleset. Visual Studio usa l'estensione predefinita durante l'esplorazione dei file del set di regole. Tuttavia, è possibile usare qualsiasi estensione.

Per altre informazioni sui set di regole, vedere Usare i set di regole per specificare le regole C++ da eseguire.

Osservazioni:

Per altre informazioni, vedere Panoramica dell'analisi del codice per C/C++ e Analisi del codice per gli avvisi C/C++.

Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.

  2. Selezionare la pagina delle>proprietà Proprietà di configurazione Analisi>codice Generale.

  3. Modificare una o più proprietà di analisi del codice.

  4. Scegliere OK o Applica per salvare le modifiche.

Per impostare le opzioni di analisi dei file esterni in Visual Studio 2019 versione 16.10 e successive:

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto.

  2. Selezionare la pagina delle proprietà Proprietà di configurazione C/C++External Includes.Select the Configuration Properties>C/C++>External Includes property page.

  3. Impostare le proprietà:

    • Disabilita analisi del codice per intestazioni esterne imposta l'opzione /analyze:external- .

    • Il set di regole di analisi per le intestazioni esterne imposta l'opzione /analyze:external:ruleset path .

  4. Scegliere OK o Applica per salvare le modifiche.

Per impostare l'opzione del compilatore a livello di codice

  1. Vedere EnablePREfast.

Vedi anche

Opzioni del compilatore MSVC
Sintassi della riga di comando del compilatore MSVC