Partilhar via


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ê:

  • Execute a análise de código em código nativo.
  • Analise avisos de defeitos de código.
  • Trate o aviso como um erro.
  • Anote o código-fonte para melhorar a análise de defeitos do código.

Pré-requisitos

Executar análise de código em código nativo

Para executar a análise de defeitos de código em 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 Reconstruir Solução.

    A solução é construída sem erros ou avisos.

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

  4. No menu Projeto , escolha Propriedades.

    A caixa de diálogo CodeDefects Property Pages é exibida.

  5. Selecione a página de propriedades Análise de código .

  6. Altere a propriedade Enable Code Analysis on Build para Sim. Escolha OK para salvar as alterações.

  7. Reconstrua o projeto CodeDefects.

    Os avisos de 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 Reconstruir Solução.

    A solução é construída sem erros ou avisos.

    Observação

    No Visual Studio 2017, você pode ver um aviso E1097 unknown attribute "no_init_all" espúrio no mecanismo IntelliSense. Pode ignorar este aviso.

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

  4. No menu Projeto , escolha Propriedades.

    A caixa de diálogo CodeDefects Property Pages é exibida.

  5. Selecione a página de propriedades Análise de código .

  6. Marque a caixa de seleção Habilitar análise de código na compilação . Escolha OK para salvar as alterações.

  7. Reconstrua o projeto CodeDefects.

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

Para analisar avisos de defeitos de código

  1. No menu Exibir , escolha Lista de Erros.

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

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

    C6230: Elenco implícito entre tipos semanticamente diferentes: usando HRESULT num contexto booleano.

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

  3. Corrija esse aviso usando a macro SUCCEEDED, que é convertida em true quando um valor de retorno HRESULT indica sucesso. Seu código deve ser semelhante ao seguinte código:

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

    C6282: Operador incorreto: atribuição de constante no contexto booleano. Considere usar '==' em vez disso.

  5. Corrija este aviso testando a igualdade. Seu código deve ser semelhante ao código a seguir:

    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. Reconstrua o projeto CodeDefects.

    O projeto é construído sem avisos ou erros.

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

Para ativar os avisos de anotação do 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 das Anotações é exibida.

  3. Selecione a página de propriedades Análise de código .

  4. Altere a propriedade Enable Code Analysis on Build para Sim. Escolha OK para salvar as 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 das Anotações é exibida.

  3. Selecione a página de propriedades Análise de código .

  4. Marque a caixa de seleção Habilitar análise de código na compilação . Escolha OK para salvar as alterações.

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

  1. Reconstrua 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: Desreferenciação do ponteiro NULL 'newNode'.

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

  4. O cursor está no local no arquivo de annotations.cpp onde o aviso ocorreu.

  5. Para corrigir esse aviso, use uma instrução 'if' para testar o valor de retorno. Seu código deve ser semelhante ao seguinte código:

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

    O projeto é construído sem avisos ou erros.

Use a anotação do código-fonte para descobrir mais problemas

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

  1. Anotar parâmetros formais e valor de retorno 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: Desreferenciação do ponteiro nulo 'node'.

    Esta advertência indica que o nó passado para a função pode ser nulo.

  4. Para corrigir este aviso, use uma instrução 'se' no início da função para testar o valor passado. Seu código deve ser semelhante ao seguinte código:

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

    O projeto agora é construído sem avisos ou erros.

Ver também

Passo a passo: Analisando código gerenciado para defeitos de código
Análise de código para C/C++