Condividi tramite


Analisi della qualità del codice C++ delle app di Windows Store con analisi del codice di Visual Studio

Lo strumento di analisi del codice disponibile in Microsoft Visual Studio Express 2012 per Windows 8 esamina il codice alla ricerca di un set di problemi comuni e di violazioni delle procedure di programmazione ottimali. Gli avvisi di analisi del codice sono diversi rispetto agli errori e avvisi del compilatore. Lo strumento di analisi del codice cerca infatti modelli di codice specifici che risultano validi ma che potrebbero causare problemi a te o ad altre persone che utilizzano il codice. L'analisi del codice può inoltre trovare difetti all'interno del codice che di solito sono difficili da individuare tramite l'esecuzione di test. L'esecuzione dello strumento di analisi del codice a intervalli regolari durante il processo di sviluppo può migliorare la qualità dell'app completata.

Nota

In Visual Studio Ultimate 2012, Visual Studio Premium 2012 e Visual Studio Professional 2012 puoi utilizzare la funzionalità di analisi del codice. Vedi Analisi della qualità dell'applicazione tramite gli strumenti di analisi del codice in MSDN Library.

In questo argomento

Puoi acquisire informazioni su:

Esecuzione dell'analisi del codice

Analizzare e risolvere gli avvisi di analisi del codice

Eliminazione degli avvisi di analisi del codice

Ricerca e filtro dei risultati dell'analisi del codice

Avvisi di analisi del codice C++

Esecuzione dell'analisi del codice

Per eseguire l'analisi del codice nella soluzione di Visual Studio:

  • Scegli Esegui Analisi del codice su soluzione dal menu Genera.

Per eseguire automaticamente l'analisi codice ogni volta che compili un progetto:

  1. Scegli il nome del progetto in Esplora soluzioni, quindi scegli Proprietà.

  2. Nella pagina delle proprietà del progetto, scegli Analisi codice, quindi Attiva analisi del codice per C/C++ in fase di compilazione.

La soluzione viene compilate e viene eseguita l'analisi del codice. I risultati vengono visualizzati nella finestra Analisi codice.

Finestra Analisi codice

Analizzare e risolvere gli avvisi di analisi del codice

Per analizzare un avviso specifico, seleziona il titolo dell'avviso nella finestra Analisi codice. L'avviso si espande per visualizzare le informazioni dettagliate sul problema. Se possibile, l'analisi del codice visualizza il numero di riga e logica di analisi che ha causato l'avviso.

Avviso analisi codice espanso

Quando espandi un avviso, le righe di codice che hanno provocato l'avviso vengono evidenziate nell'editor di codice di Visual Studio.

Codice sorgente evidenziato

Dopo aver compreso il problema, potrai risolverlo nel codice. Riesegui quindi l'analisi del codice per verificare che l'avviso non venga più visualizzato nella finestra Analisi codice e che la correzione non generare nuovi avvisi.

Suggerimento

Puoi rieseguire l'analisi del codice dalla finestra Analisi codice. Scegli il pulsante Analizza, quindi l'ambito dell'analisi. Puoi rieseguire l'analisi dell'intera soluzione o di un progetto selezionato.

Eliminazione degli avvisi di analisi del codice

In alcuni casi potresti decidere di non correggere un avviso di analisi del codice. Puoi decidere che risolvere il problema richiede un'eccessiva ricodificazione relativamente alla probabilità che il problema si ripresenti in qualsiasi implementazione realistica del codice. Oppure potresti ritenere che l'analisi utilizzata nell'avviso sia inadeguata per il contesto specifico. Puoi eliminare gli avvisi in modo che non vengano più visualizzati nella finestra Analisi codice.

Per eliminare un avviso:

  1. Se le informazioni dettagliate non sono visualizzate, espandi il titolo dell'avviso.

  2. Scegli il link Azioni nella parte inferiore dell'avviso.

  3. Scegli Elimina messaggio, quindi In origine.

L'eliminazione di un messaggio composta l'inserimento di #pragma(warning:WarningId) che elimina l'avviso per la riga di codice.

Ricerca e filtro dei risultati dell'analisi del codice

Puoi effettuare una ricerca in lunghi elenchi di messaggi di avviso e filtrare gli avvisi nelle soluzioni composte da più progetti.

Finestra Cerca e filtra analisi codice

Avvisi di analisi del codice C++

L'analisi del codice genera gli avvisi seguenti per il codice C++:

Regola

Descrizione

C6001

Utilizzo di memoria non inizializzata

C6011

Dereferenziazione del puntatore NULL

C6029

Utilizzo del valore non verificato

C6053

Terminazione zero da chiamata

C6059

Concatenazione non valida

C6063

Argomento stringa mancante per formattare la funzione

C6064

Argomento Integer mancante per formattare la funzione

C6066

Argomento puntatore mancante per formattare la funzione

C6067

Argomento puntatore stringa mancante per formattare la funzione

C6101

Restituzione di memoria non inizializzata

C6200

L'indice supera il limite massimo del buffer

C6201

L'indice supera il limite massimo del buffer di stack

C6270

Argomento Float mancante per formattare la funzione

C6271

L'argomento aggiuntivo per formattare funzione

C6272

Argomento non Float per formattare la funzione

C6273

Argomento non Integer per formattare la funzione

C6274

Argomento non Character per formattare la funzione

C6276

Cast stringa non valido

C6277

Chiamata CreateProcess non valida

C6284

Argomento di oggetto non valido per formattare la funzione

C6290

Precedenza Logical-Not Bitwise-And

C6291

Precedenza Logical-Not Bitwise-Or

C6302

Argomento stringa di caratteri non valido per formattare la funzione

C6303

Argomento stringa di caratteri wide non valido per formattare la funzione

C6305

Utilizzo dimensione e conteggio non corrispondente

C6306

Chiamata di funzione dell'argomento variabile non corretto

C6328

Tipo argomento potenzialmente non corrispondente

C6385

Overrun di lettura

C6386

Overrun di scrittura

C6387

Valore parametro non valido

C6500

Proprietà attributo non valido

C6501

Conflitto valori di proprietà attributo

C6503

I riferimenti non possono essere Null.

C6504

Null su non puntatore

C6505

MustCheck su nullo

C6506

Dimensioni buffer su non puntatore o matrice

C6507

Null non corrispondente a zero dereferenziazione

C6508

Accesso in scrittura a costante

C6509

Restituzione utilizzati in precondizione

C6510

Null terminato su non puntatore

C6511

MustCheck deve essere Yes o No

C6513

Dimensioni elemento senza dimensione buffer

C6514

Le dimensioni del buffer superano le dimensioni della matrice

C6515

Dimensioni buffer su non puntatore

C6516

Nessuna proprietà su attributo

C6517

Dimensioni valide su buffer non leggibile

C6518

Dimensioni scrivibili su buffer non scrivibile

C6519

Annotazione non valida: il valore della proprietà 'NeedsRelease' deve essere Yes o No.

C6521

Dereferenziazione stringa dimensioni non valida

C6522

Tipo stringa dimensioni non valida

C6523

Parametro stringa dimensioni non valida

C6525

Percorso irraggiungibile stringa dimensioni non valida

C6526

Tipo di buffer stringa dimensioni non valida

C6527

Annotazione non valida: la proprietà 'NeedsRelease' non può essere utilizzata con valori di tipo void.

C6530

Stile stringa formato non riconosciuto

C6540

L'utilizzo delle annotazioni di attributo in questa funzione invalida tutte le relative annotazioni __declspec

C6551

Specifica di dimensione non valida: espressione non analizzabile

C6552

Deref= o Notref= non valido: espressione non analizzabile

C6701

Il valore non è un valore Yes/No/Maybe valido

C6702

Il valore non è un valore stringa

C6703

Il valore non è un numero

C6704

Errore imprevisto dell'espressione dell'annotazione

C6705

Il numero di argomenti previsto per l'annotazione non corrisponde al numero di argomenti effettivo per l'annotazione

C6706

Errore di annotazione imprevisto per l'annotazione

C28021

Il parametro annotato deve essere un puntatore

C28182

Dereferenziazione del puntatore NULL Il puntatore contiene lo stesso valore NULL di un altro puntatore.

C28202

Riferimento non valido a membro non statico

C28203

Riferimento ambiguo a membro di classe

C28205

_Success_ o _On_failure_ utilizzato in un contesto non valido

C28206

L'operando sinistro punta a uno struct. Utilizzare '->'.

C28207

L'operando sinistro è uno struct. Utilizzare '.'

C28210

Le annotazioni per il contesto __on_failure non devono trovarsi in pre-contesto esplicito

C28211

Previsto nome contesto statico per SAL_context

C28212

Prevista espressione del puntatore per l'annotazione

C28213

L'annotazione _Use_decl_annotations_ deve essere utilizzata per fare riferimento, senza alcuna modifica, a una dichiarazione precedente.

C28214

I nomi dei parametri degli attributi devono essere p1...p9

C28215

Impossibile applicare typefix a un parametro che già dispone di un typefix

C28216

L'annotazione checkReturn si applica solo a postcondizioni per il parametro di funzione specifico.

C28217

Per la funzione, il numero dei parametri per l'annotazione non corrisponde a quello trovato nel file

C28218

Per il parametro di funzioni, il parametro dell'annotazione non corrisponde a quello trovato nel file

C28219

Membro di enumerazione previsto per l'annotazione del parametro nell'annotazione

C28220

Prevista espressione di tipo Integer per l'annotazione del parametro nell'annotazione

C28221

Prevista espressione di tipo String per il parametro nell'annotazione

C28222

Previsto __yes, __no o __maybe per l'annotazione

C28223

Token/identificatore previsto per l'annotazione, parametro

C28224

L'annotazione richiede parametri

C28225

Impossibile trovare il numero corretto di parametri obbligatori nell'annotazione

C28226

L'annotazione non può essere anche PrimOp nella dichiarazione corrente

C28227

L'annotazione non può essere anche PrimOp nella dichiarazione precedente

C28228

Parametro di annotazione: impossibile utilizzare il tipo nelle annotazioni

C28229

L'annotazione non supporta parametri

C28230

Il tipo di parametro non ha membro

C28231

L'annotazione è valida solo in una matrice

C28232

pre, post o deref non applicato ad alcuna annotazione

C28233

pre, post o deref applicato a un blocco

C28234

L'espressione __at non si applica alla funzione corrente

C28235

La funzione non può fungere autonomamente da annotazione

C28236

L'annotazione non può essere utilizzata in un'espressione

C28237

L'annotazione nel parametro non è più supportata

C28238

L'annotazione nel parametro presenta più di un valore, stringValue e longValue. Utilizzare paramn=xxx

C28239

L'annotazione nel parametro presenta sia stringValue, o longValue, che paramn=xxx. Utilizzare solo paramn=xxx

C28240

L'annotazione nel parametro presenta param2 ma nessun param1

C28241

L'annotazione per la funzione nel parametro non è riconosciuta

C28243

L'annotazione per la funzione nel parametro richiede più dereferenziazioni di quante ne siano consentite dal tipo annotato effettivo

C28245

L'annotazione per la funzione annota 'this' in una funzione non membro

C28246

L'annotazione del parametro per la funzione non corrisponde al tipo del parametro

C28250

Annotazione incoerente per la funzione: errore dell'istanza precedente

C28251

Annotazione incoerente per la funzione: errore dell'istanza

C28252

Annotazione non coerente per la funzione: il parametro include altre annotazioni in questa istanza.

C28253

Annotazione non coerente per la funzione: il parametro include altre annotazioni in questa istanza.

C28254

dynamic_cast<>() non è supportato nelle annotazioni

C28262

Errore di sintassi dell'annotazione rilevato nella funzione per l'annotazione

C28263

Errore di sintassi nell'annotazione condizionale rilevato nell'oggetto intrinseco

C28264

I valori dell'elenco dei risultati devono essere costanti.

C28267

Errore di sintassi nelle annotazioni rilevato nella funzione per l'annotazione

C28272

L'annotazione per la funzione, parametro, durante l'analisi non è coerente con la dichiarazione della funzione

C28273

Gli indizi per la funzione non sono coerenti con la dichiarazione della funzione

C28275

Il parametro per _Macro_value_ è null

C28279

Per il simbolo è stato trovato un 'begin' senza il corrispondente 'end'

C28280

Per il simbolo, è stato trovato un 'end' senza un 'begin' corrispondente

C28282

Le stringhe di formato devono essere nelle precondizioni

C28285

Per la funzione, errore di sintassi nel parametro

C28286

Per la funzione, errore di sintassi nei pressi della fine

C28287

Per la funzione, errore di sintassi nell'annotazione _At_() (nome parametro non riconosciuto)

C28288

Per la funzione, errore di sintassi nell'annotazione _At_() (nome parametro non valido)

C28289

Per la funzione: ReadableTo o WritableTo non disponeva di limit-spec come parametro

C28290

L'annotazione per la funzione contiene un numero di riferimenti esterni maggiore del numero di parametri effettivi

C28291

Il post null/notnull al livello deref 0 è privo di significato per la funzione.

C28300

Operandi dell'espressione di tipi incompatibili per l'operatore

C28301

Nessuna annotazione per la prima dichiarazione di funzione.

C28302

Operatore _Deref_ aggiuntivo rilevato nell'annotazione.

C28303

Operatore _Deref_ ambiguo trovato nell'annotazione.

C28304

Operatore _Notref_ non correttamente posizionato applicato al token.

C28305

È stato individuato un errore durante l'analisi

C28350

L'annotazione descrive una situazione non applicabile in modo condizionale.

C28351

L'annotazione descrive la posizione nella condizione in cui non è possibile utilizzare un valore dinamico (variabile).