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

Este passo a passo demonstra como analisar o código C/C++ para possíveis defeitos de código. Ele usa as ferramentas de análise de código para código C/C++.

Neste passo a passo, você realizará as seguintes tarefas:

  • Executar a análise de código no código nativo.
  • Analisar avisos de defeito de código.
  • Tratar um aviso como erro.
  • Anotar o código-fonte para aprimorar a análise de defeitos de código.

Pré-requisitos

Executar a análise de código no código nativo

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

  1. Abra a solução CppDemo no Visual Studio.

    A solução CppDemo agora preenche o Gerenciador de Soluções.

  2. No menu Compilar, escolha Recompilar Solução.

    A solução é compilada sem erros nem avisos.

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

  4. No menu Projeto, escolha Propriedades.

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

  5. Página de propriedades de Análise de Código.

  6. Altere a propriedade Habilitar Análise de Código ao Compilar para Sim. Escolha OK para salvar suas alterações.

  7. Recompile o projeto CodeDefects.

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

  1. Abra a solução CppDemo no Visual Studio.

    A solução CppDemo agora preenche o Gerenciador de Soluções.

  2. No menu Compilar, escolha Recompilar Solução.

    A solução é compilada sem erros nem avisos.

    Observação

    No Visual Studio 2017, você pode ver um aviso E1097 unknown attribute "no_init_all" espúrio no mecanismo IntelliSense. Ignore esse erro.

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

  4. No menu Projeto, escolha Propriedades.

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

  5. Página de propriedades de Análise de Código.

  6. Marque a caixa de seleção Habilitar Análise de Código ao Compilar. Escolha OK para salvar suas alterações.

  7. Recompile o projeto CodeDefects.

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

Para analisar avisos de defeito de código

  1. No menu Exibir, escolha Lista de Erros.

    Este item de menu pode não estar visível. Isso depende do perfil do desenvolvedor que você escolheu no Visual Studio. Talvez seja necessário apontar para Outras Janelas no menu Exibir e, em seguida, escolher Lista de Erros.

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

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

    O editor de código exibe a linha que causou o aviso dentro da função bool ProcessDomain(). Esse aviso indica que um está sendo usado em uma instrução 'if' onde um HRESULT resultado booleano é esperado. Normalmente, isso é um erro, porque quando o HRESULT S_OK é retornado de uma função, isso indica êxito, mas quando convertido em um valor booliano, ele é avaliado como false.

  3. Corrija esse aviso usando a macro SUCCEEDED, que é convertida em true quando um valor retornado HRESULT indica êxito. O seu código deve ser semelhante ao seguinte:

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

    C6282: Operador incorreto: atribuição de constante em contexto booliano. Considere o uso de '==' em seu lugar.

  5. Corrija este aviso testando a igualdade. A aparência do seu código deve ser semelhante ao seguinte:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
    
  6. Corrija os avisos C6001 restantes na Lista de Erros inicializando i e j para 0.

  7. Recompile o projeto CodeDefects.

    O projeto é compilado sem avisos nem erros.

Corrigir avisos de anotação de código-fonte

Para habilitar os avisos de anotação de código-fonte em annotation.c

  1. No Gerenciador de Soluções, selecione o projeto Anotações.

  2. No menu Projeto, escolha Propriedades.

    A caixa de diálogo Páginas de Propriedades de Anotações é exibida.

  3. Página de propriedades de Análise de Código.

  4. Altere a propriedade Habilitar Análise de Código ao Compilar para Sim. Escolha OK para salvar suas alterações.

  1. No Gerenciador de Soluções, selecione o projeto Anotações.

  2. No menu Projeto, escolha Propriedades.

    A caixa de diálogo Páginas de Propriedades de Anotações é exibida.

  3. Página de propriedades de Análise de Código.

  4. Marque a caixa de seleção Habilitar Análise de Código ao Compilar. Escolha OK para salvar suas alterações.

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

  1. Recompile o projeto Anotações.

  2. No menu Compilar, escolha Executar Análise de Código em Anotações.

  3. Na Lista de Erros, clique duas vezes no seguinte aviso:

    C6011: desreferenciando o ponteiro nulo 'newNode'.

    Esse aviso indica falha do chamador para verificar o valor retornado. Nesse caso, uma chamada para AllocateNode pode retornar um valor NULL. Confira o arquivo de cabeçalho annotations.h para a declaração de função para AllocateNode.

  4. O cursor está no local do arquivo annotations.cpp em que o aviso ocorreu.

  5. Para corrigir esse aviso, use uma instrução "if" para testar o valor retornado. O seu código deve ser semelhante ao seguinte:

    LinkedList* newNode = AllocateNode();
    if (nullptr != newNode)
    {
        newNode->data = value;
        newNode->next = 0;
        node->next = newNode;
    }
    
  6. Recompile o projeto Anotações.

    O projeto é compilado sem avisos nem erros.

Usar anotação de código-fonte para descobrir mais problemas

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

  1. Anote os parâmetros formais e o valor retornado da função AddTail para indicar que os valores de ponteiro podem ser nulos:

    _Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)
    
  2. No menu Compilar, escolha Executar Análise de Código na Solução.

  3. Na Lista de Erros, clique duas vezes no seguinte aviso:

    C6011: Desreferenciando o ponteiro nulo 'node'.

    Esse aviso indica que o nó passado para a função pode ser nulo.

  4. Para corrigir esse aviso, use uma instrução "if" no início da função para testar o valor passado. O seu código deve ser semelhante ao seguinte:

    if (nullptr == node)
    {
         return nullptr;
    }
    
  5. No menu Compilar, escolha Executar Análise de Código na Solução.

    O projeto agora é compilado sem avisos nem erros.

Confira também

Instruções passo a passo: analisando código gerenciado em busca de defeitos de código
Análise de código para C/C++