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
Visual Studio Premium ou Visual Studio Ultimate.
Uma cópia do Exemplo de demonstração.
Noções básicas sobre C/C++.
Para executar a análise de defeitos de código no código nativo
Abra a solução de demonstração em Visual Studio.
A solução de demonstração agora preenche Solution Explorer.
Sobre o Build menu, clique em Rebuild Solution.
A solução baseia-se sem erros ou avisos.
Em Solution Explorer, selecione o projeto CodeDefects.
No menu Project, clique em Properties..
O Páginas de propriedades de CodeDefects caixa de diálogo é exibida.
Clique em Code Analysis.
Clique o Permitem a análise de código para C/C++ na compilação caixa de seleção.
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
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.
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.
Para corrigir esse aviso usando a macro teve êxito. Seu código deve se parecer com o seguinte código:
if (SUCCEEDED (ReadUserAccount()) )
No Error List, clique duas vezes o seguinte aviso:
Aviso C6282: Operador incorreto: atribuição de constante no contexto do teste. Foi = = pretendido?
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
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)
Recrie o projeto CodeDefects.
No Error List, C6001, agora aparece como um erro.
Corrija os erros de C6001 duas restantes na Error List por inicializar i e j como 0.
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
No Solution Explorer, selecione o projeto de anotações.
No menu Project, clique em Properties..
O Páginas de propriedades anotações caixa de diálogo é exibida.
Clique em Code Analysis.
Selecione o Permitem a análise de código para C/C++ na compilação caixa de seleção.
Recrie o projeto de anotações.
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).
Abra o arquivo annotations.cpp.
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;
}
Recrie o projeto de anotações.
O projeto é compilado sem erros ou avisos.
Para usar a anotação de código de origem
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
)
Recrie o projeto de anotações.
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.
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; . . . }
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