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
Visual Studio Premium ou Visual Studio Ultimate.
Uma cópia de Amostra de demonstração.
Compreensão básica C/C++.
Para executar análise de defeito de código em código nativo
Abra a solução de demonstração em Visual Studio.
A solução de demonstração agora popula Gerenciador de Soluções.
No menu de Compilar , clique em Recompilar solução.
A solução cria sem nenhum erro ou aviso.
Em Gerenciador de Soluções, selecione o projeto de CodeDefects.
No menu Projeto, clique em Propriedades.
A caixa de diálogo de Páginas de propriedades de CodeDefects é exibida.
Clique Análise de Código.
Clique na caixa de seleção de Habilitar a análise de código para C/C++ na construção .
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
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.
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.
Corrija esse aviso com a macro SUCEDIDO.O código deve ser semelhante ao seguinte código:
if (SUCCEEDED (ReadUserAccount()) )
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?
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
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)
Recrie o projeto de CodeDefects.
Em Lista de Erros, C6001 aparece agora como um erro.
Corrija os dois erros C6001 restantes em Lista de Erros inicializando i e j a 0.
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
No Solution Explorer, selecione o projeto de anotações.
No menu Projeto, clique em Propriedades.
A caixa de diálogo de Páginas de propriedades de anotações é exibida.
Clique Análise de Código.
Marque a caixa de seleção de Habilitar a análise de código para C/C++ na construção .
Recrie o projeto de anotações.
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).
Abra o arquivo de annotations.cpp.
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;
}
Recrie o projeto de anotações.
Compila o projeto sem os avisos ou erros.
Para usar a anotação do código-fonte
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
)
Recrie o projeto de anotações.
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.
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; . . . }
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