Compartilhar via


Instruções passo a passo: analisando código do C/C++ em busca de defeitos

Este passo a passo demonstra como analisar o código C/C++ para falhas potenciais de código usando a ferramenta análise de código para o código C/C++.

Neste passo a passo, você etapas no processo de usar a análise de código para analisar seu código C/C++ para falhas potenciais de código.

Você executará as seguintes etapas:

  • Análise de código de execução em código nativo.

  • Analisar avisos de defeito de código.

  • Tratar o aviso como um erro.

  • Anotar o código-fonte para melhorar a análise de defeito de código.

Pré-requisitos

Para executar análise de defeito de código em código nativo

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

    A solução de demonstração agora popula Gerenciador de Soluções.

  2. No menu de Compilar , clique em Recompilar solução.

    A solução cria sem nenhum erro ou aviso.

  3. Em Gerenciador de Soluções, selecione o projeto de CodeDefects.

  4. No menu Projeto, clique em Propriedades.

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

  5. Clique Análise de Código.

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

  7. Recrie o projeto de CodeDefects.

    Os avisos da análise do código são exibidos em Lista de Erros.

Para analisar avisos de defeito de código

  1. No menu de Exibir , clique em Lista de Erros.

    Dependendo do perfil do desenvolvedor que você escolheu em Visual Studio, você pode ter que aponte para Outras Janelas no menu de Exibir , e clique em Lista de Erros.

  2. Em Lista de Erros, clique duas vezes no seguinte aviso:

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

    O editor de códigos exibe a linha que causou o aviso na função boolProcessDomain().Esse aviso indica que um HRESULT estiver sendo usado no “” se a instrução onde um resultado booliano é esperado.

  3. Corrija esse aviso com a macro SUCEDIDO.O código deve ser semelhante ao seguinte código:

    if (SUCCEEDED (ReadUserAccount()) )
    
  4. Em Lista de Erros, clique duas vezes no seguinte aviso:

    C6282 de aviso: Operador incorreto: atribuição da constante no contexto de teste.== Foi planejado?

  5. Corrija esse aviso para teste para fins de igualdade.O código deve ser semelhante ao seguinte código:

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

Para tratar o aviso como um erro

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

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

    Em Lista de Erros, C6001 aparece agora como um erro.

  3. Corrija os dois erros C6001 restantes em Lista de Erros inicializando i e j a 0.

  4. Recrie o projeto de CodeDefects.

    Compila o projeto sem os avisos ou erros.

Para corrigir os avisos da anotação do código-fonte em annotation.c

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

  2. No menu Projeto, clique em Propriedades.

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

  3. Clique Análise de Código.

  4. Marque a caixa de seleção de Habilitar a análise de código para C/C++ na construção .

  5. Recrie o projeto de anotações.

  6. Em Lista de Erros, clique duas vezes no seguinte aviso:

    C6011 de aviso: Desreferenciando o ponteiro NULL “newNode”.

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

  7. Abra o arquivo de annotations.cpp.

  8. Para corrigir esse aviso, use “se” instrução para testar o valor de retorno.O código deve ser semelhante ao seguinte código:

    if (NULL != newNode)

    {

    newNode->data = value;

    newNode->next = 0;

    node->next = newNode;

    }

  9. Recrie o projeto de anotações.

    Compila o projeto sem os avisos ou erros.

Para usar a anotação do código-fonte

  1. Anotar parâmetros e formais valor de retorno da função AddTail usando pre e postar condições conforme 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. Em Lista de Erros, clique duas vezes no seguinte aviso:

    C6011 de aviso: Desreferenciando o ponteiro NULL “nó”.

    Esse aviso indica que o nó passada para a função pode ser nulo, e indica o número da linha onde o aviso foi gerado.

  4. Para corrigir esse aviso, use “se” instrução para testar o valor de retorno.O código deve ser semelhante ao seguinte código:

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

    Compila o projeto sem os avisos ou erros.

Consulte também

Tarefas

Instruções passo a passo: analisando código gerenciado em busca de defeitos de código