Condividi tramite


Procedura dettagliata: Analisi del codice C/C++ per individuare i difetti

Questa procedura dettagliata illustra come analizzare il codice C/C++ per individuare potenziali difetti del codice. Usa gli strumenti di analisi del codice per il codice C/C++.

In questa procedura dettagliata:

  • Eseguire l'analisi del codice nel codice nativo.
  • Analizzare gli avvisi di difetto del codice.
  • Considerare l'avviso come errore.
  • Annotare il codice sorgente per migliorare l'analisi dei difetti del codice.

Prerequisiti

  • Copia dell'esempio CppDemo.
  • Conoscenza di base di C/C++.

Eseguire l'analisi del codice nel codice nativo

Per eseguire l'analisi dei difetti del codice nel codice nativo

  1. Aprire la soluzione CppDemo in Visual Studio.

    La soluzione CppDemo ora popola Esplora soluzioni.

  2. Scegliere Ricompila soluzione dal menu Compila.

    La soluzione viene compilata senza errori o avvisi.

  3. In Esplora soluzioni selezionare il progetto CodeDefects.

  4. Scegliere Proprietà dal menu Progetto.

    Viene visualizzata la finestra di dialogo Pagine delle proprietà CodeDefects.

  5. Selezionare la pagina delle proprietà Analisi codice.

  6. Impostare la proprietà Enable Code Analysis on Build su Sì. Scegli OK per salvare le modifiche.

  7. Ricompilare il progetto CodeDefects.

    Gli avvisi di analisi del codice vengono visualizzati nella finestra Elenco errori.

  1. Aprire la soluzione CppDemo in Visual Studio.

    La soluzione CppDemo ora popola Esplora soluzioni.

  2. Scegliere Ricompila soluzione dal menu Compila.

    La soluzione viene compilata senza errori o avvisi.

    Nota

    In Visual Studio 2017 potrebbe essere visualizzato un avviso E1097 unknown attribute "no_init_all" spurio nel motore IntelliSense. È possibile ignorare questo avviso.

  3. In Esplora soluzioni selezionare il progetto CodeDefects.

  4. Scegliere Proprietà dal menu Progetto.

    Viene visualizzata la finestra di dialogo Pagine delle proprietà CodeDefects.

  5. Selezionare la pagina delle proprietà Analisi codice.

  6. Selezionare la casella di controllo Abilita analisi codice per la compilazione . Scegli OK per salvare le modifiche.

  7. Ricompilare il progetto CodeDefects.

    Gli avvisi di analisi del codice vengono visualizzati nella finestra Elenco errori.

Per analizzare gli avvisi relativi ai difetti del codice

  1. Scegliere Elenco errori dal menu Visualizza.

    Questa voce di menu potrebbe non essere visibile. Dipende dal profilo di sviluppo scelto in Visual Studio. Potrebbe essere necessario scegliere Altre finestre dal menu Visualizza e quindi scegliere Elenco errori.

  2. Nella finestra Elenco errori fare doppio clic sull'avviso seguente:

    C6230: cast implicito tra tipi semanticamente diversi: uso di HRESULT in un contesto booleano.

    L'editor di codice visualizza la riga che ha causato l'avviso all'interno della funzione bool ProcessDomain(). Questo avviso indica che un oggetto viene usato in un'istruzione HRESULT 'if' in cui è previsto un risultato booleano. In genere si tratta di un errore, perché quando il valore HRESULT viene restituito da una funzione indica l'esito S_OK positivo, ma quando viene convertito in un valore booleano restituisce false.

  3. Correggere l'avviso usando la macro , che viene convertita in true quando un HRESULT valore restituito indica l'esito SUCCEEDED positivo. Il codice dovrebbe essere simile al codice seguente:

    if (SUCCEEDED(ReadUserAccount()))
    
  4. Nell'elenco errori fare doppio clic sull'avviso seguente:

    C6282: Operatore non corretto: assegnazione di costante nel contesto booleano. Prendere invece in considerazione l'uso di '=='.

  5. Correggere l'avviso verificando l'uguaglianza. Il codice dovrebbe essere simile al codice seguente:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
    
  6. Correggere gli avvisi C6001 rimanenti nell'elenco errori inizializzando i e j su 0.

  7. Ricompilare il progetto CodeDefects.

    Il progetto viene compilato senza avvisi o errori.

Correggere gli avvisi di annotazione del codice sorgente

Per abilitare gli avvisi di annotazione del codice sorgente in annotation.c

  1. In Esplora soluzioni selezionare il progetto Annotazioni.

  2. Scegliere Proprietà dal menu Progetto.

    Viene visualizzata la finestra di dialogo Pagine delle proprietà Annotazioni.

  3. Selezionare la pagina delle proprietà Analisi codice.

  4. Impostare la proprietà Enable Code Analysis on Build su Sì. Scegli OK per salvare le modifiche.

  1. In Esplora soluzioni selezionare il progetto Annotazioni.

  2. Scegliere Proprietà dal menu Progetto.

    Viene visualizzata la finestra di dialogo Pagine delle proprietà Annotazioni.

  3. Selezionare la pagina delle proprietà Analisi codice.

  4. Selezionare la casella di controllo Abilita analisi codice per la compilazione . Scegli OK per salvare le modifiche.

Per correggere gli avvisi di annotazione del codice sorgente in annotation.c

  1. Ricompilare il progetto Annotazioni.

  2. Scegliere Esegui analisi del codice nelle annotazioni dal menu Compila.

  3. Nell'elenco errori fare doppio clic sull'avviso seguente:

    C6011: dereferenziare il puntatore NULL 'newNode'.

    Questo avviso indica un errore da parte del chiamante per controllare il valore restituito. In questo caso, una chiamata a AllocateNode potrebbe restituire un valore NULL. Vedere il file di intestazione annotations.h per la dichiarazione di funzione per AllocateNode.

  4. Il cursore si trova nel percorso del file annotations.cpp in cui si è verificato l'avviso.

  5. Per correggere questo avviso, usare un'istruzione 'if' per testare il valore restituito. Il codice dovrebbe essere simile al codice seguente:

    LinkedList* newNode = AllocateNode();
    if (nullptr != newNode)
    {
        newNode->data = value;
        newNode->next = 0;
        node->next = newNode;
    }
    
  6. Ricompilare il progetto Annotazioni.

    Il progetto viene compilato senza avvisi o errori.

Usare l'annotazione del codice sorgente per individuare altri problemi

Per usare l'annotazione del codice sorgente

  1. Annotare i parametri formali e il valore restituito della funzione AddTail per indicare che i valori del puntatore possono essere Null:

    _Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)
    
  2. Dal menu Genera scegliere Esegui analisi del codice sulla soluzione.

  3. Nell'elenco errori fare doppio clic sull'avviso seguente:

    C6011: dereferenziare il puntatore NULL 'node'.

    Questo avviso indica che il nodo passato alla funzione potrebbe essere Null.

  4. Per correggere questo avviso, usare un'istruzione 'if' all'inizio della funzione per testare il valore passato. Il codice dovrebbe essere simile al codice seguente:

    if (nullptr == node)
    {
         return nullptr;
    }
    
  5. Dal menu Genera scegliere Esegui analisi del codice sulla soluzione.

    Il progetto ora viene compilato senza avvisi o errori.

Vedi anche

Procedura dettagliata: analisi del codice gestito per l'identificazione di errori del codice
Analisi del codice per C/C++