Demonstra Passo a passo: Analisando o código C/C++ para defeitos

Esta explicação passo a passo demonstra como analisar o código C/C++ para possíveis defeitos de código usando a ferramenta de análise de código para código C/C++.

Esta explicação passo a passo, você depurar o processo de análise de código de uso para analisar seu código C/C++ para possíveis defeitos de código.

Você irá concluir as seguintes etapas:

  • Execute análise de código no código nativo.

  • Analise os avisos de defeitos de código.

  • Aviso de tratar como um erro.

  • Anote o código-fonte para melhorar a análise de defeitos de código.

Pré-requisitos

Para executar a análise de defeitos de código no código nativo

  1. Abra a solução de demonstração em Visual Studio.

    A solução de demonstração agora preenche Solution Explorer.

  2. Sobre o Build menu, clique em Rebuild Solution.

    A solução baseia-se sem erros ou avisos.

  3. Em Solution Explorer, selecione o projeto CodeDefects.

  4. No menu Project, clique em Properties..

    O Páginas de propriedades de CodeDefects caixa de diálogo é exibida.

  5. Clique em Code Analysis.

  6. Clique o Permitem a análise de código para C/C++ na compilação caixa de seleção.

  7. Recrie o projeto CodeDefects.

    Os avisos de análise de código são exibidos o Error List.

Para analisar os avisos de defeitos de código

  1. Sobre o Exibir menu, clique em Error List.

    Dependendo do perfil desenvolvedor que você escolheu na Visual Studio, você pode ter que apontar para Other Windows na Exibir menu e clique Error List.

  2. No Error List, clique duas vezes o seguinte aviso:

    Aviso C6230: Conversão implícita entre tipos diferentes de semanticamente: usando o HRESULT em um contexto de booleano.

    O editor de código exibe a linha que causou o aviso na função bool ProcessDomain(). Este aviso indica que um HRESULT que está sendo usado no 'if' instrução onde um resultado booleano é esperado.

  3. Para corrigir esse aviso usando a macro teve êxito. Seu código deve se parecer com o seguinte código:

    if (SUCCEEDED (ReadUserAccount()) )
    
  4. No Error List, clique duas vezes o seguinte aviso:

    Aviso C6282: Operador incorreto: atribuição de constante no contexto do teste. Foi = = pretendido?

  5. Teste de igualdade para corrigir esse aviso. Seu código deve ser semelhante ao seguinte código:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != '\\'))
    

Para tratar o aviso como erro

  1. No arquivo Bug.cpp, adicione o seguinte #pragma a instrução para o início do arquivo para tratar o aviso de C6001 como um erro:

    #pragma warning (error: 6001)
    
  2. Recrie o projeto CodeDefects.

    No Error List, C6001, agora aparece como um erro.

  3. Corrija os erros de C6001 duas restantes na Error List por inicializar i e j como 0.

  4. Recrie o projeto CodeDefects.

    O projeto é compilado sem erros ou avisos.

Para corrigir os avisos de anotação do código de origem no annotation.c

  1. No Solution Explorer, selecione o projeto de anotações.

  2. No menu Project, clique em Properties..

    O Páginas de propriedades anotações caixa de diálogo é exibida.

  3. Clique em Code Analysis.

  4. Selecione o Permitem a análise de código para C/C++ na compilação caixa de seleção.

  5. Recrie o projeto de anotações.

  6. No Error List, clique duas vezes o seguinte aviso:

    Aviso C6011: Referência nula ponteiro 'newNode'.

    Este aviso indica falha pelo chamador para verificar o valor de retorno. Neste caso, uma chamada para AllocateNode pode retornar um valor nulo (consulte o arquivo de cabeçalho de annotations.h para a declaração da função AllocateNode).

  7. Abra o arquivo annotations.cpp.

  8. Para corrigir esse aviso, use o 'if' instrução para testar o valor de retorno. Seu código deve se parecer com o seguinte código:

    if (NULL != newNode)

    {

    newNode->data = value;

    newNode->next = 0;

    node->next = newNode;

    }

  9. Recrie o projeto de anotações.

    O projeto é compilado sem erros ou avisos.

Para usar a anotação de código de origem

  1. Anotar parâmetros formais e retornar o valor da função AddTail usando as condições anteriores e subseqüentes, como mostrado neste exemplo:

    [returnvalue:SA_Post (Null=SA_Maybe)] LinkedList* AddTail

    (

        [SA_Pre(Null=SA_Maybe)] LinkedList* node,

        int value

     )

  2. Recrie o projeto de anotações.

  3. No Error List, clique duas vezes o seguinte aviso:

    Aviso C6011: Cancelar a referência de ponteiro NULL 'nó'.

    Este aviso indica que o nó passado para a função pode ser nulo e indica o número da linha onde o aviso foi disparado.

  4. Para corrigir esse aviso, use o 'if' instrução para testar o valor de retorno. Seu código deve se parecer com o seguinte código:

      . . .
      LinkedList *newNode = NULL; 
      if (NULL == node)
      {
           return NULL;
          . . .
      }
    
  5. Recrie o projeto de anotações.

    O projeto é compilado sem erros ou avisos.

Consulte também

Tarefas

Demonstra Passo a passo: Análise de código gerenciado para defeitos de código