Introdução ao Analisador Estático PVS-Studio para Visual C ++

Quadro 8

Neste artigo, vou falar sobre o PVS-Studio, um analisador de códigos C e C ++, e mostrar como usá-lo no ambiente Visual C ++. Este guia é destinado especificamente a usuários iniciantes.

Instalando o analisador


O PVS-Studio suporta o Microsoft Visual Studio 2019, 2017, 2015, 2013, 2012 e 2010. Consulte a documentação para obter os requisitos do sistema. Atualmente, o PVS-Studio pode analisar projetos escritos em C, C ++, C # e Java. No entanto, este artigo enfoca os programadores que trabalham no Visual C ++ e procuram ajuda para começar a usar o analisador.

O pacote de instalação pode ser baixado aqui . Depois de executá-lo, você terá várias opções de integração (Figura 1) para escolher. As opções indisponíveis estão acinzentadas.

Figura 1. Janela de seleção de componentes de integração.

Figura 1. Janela de seleção de componentes de integração.

Depois de instalar o PVS-Studio, abra a janela Sobre do Visual Studio e verifique se o analisador está presente entre os produtos instalados.

Verificando um projeto


Depois que a instalação estiver concluída, você poderá verificar seu projeto. Você também pode tentar analisar a solução inteira. Para fazer isso, clique em Extensões → PVS-Studio → Verificar → Solução (Figura 2).

Figura 2. Verificando uma solução com o PVS-Studio.

Figura 2. Verificando uma solução com o PVS-Studio.

Se você tiver alguma dificuldade para executar a verificação, consulte a seção " PVS-Studio: Troubleshooting " em nosso site. Essas não são algumas dicas idiotas como "verifique se o plugue está conectado à tomada". A seção descreve problemas típicos que nossos usuários relataram e maneiras de resolvê-los.

Manipulando a lista de avisos


Quando a verificação estiver concluída, as mensagens de diagnóstico aparecerão em uma janela especial. Essa janela possui muitos elementos, que servem para manipular a lista, para que você possa visualizar apenas os avisos de interesse. No começo, porém, pode parecer um pouco complicado.

Figura 3. Janela de avisos. Clique na imagem para ampliar.

Figura 3. Janela de avisos. Clique na imagem para ampliar.

A visão geral completa dos elementos da janela pode ser encontrada na documentação , mas agora vamos nos concentrar apenas nos básicos:

  1. Níveis de certeza dos avisos. A captura de tela acima mostra os níveis médio e alto ativados. O nível baixo lida mais com "Code Smells" e avisos que, infelizmente, tendem a produzir muitos falsos positivos. Por que existem tantos avisos de nível baixo e médio, mas tão poucos avisos de alto nível? A resposta é que o diagnóstico MISRA foi ativado, que contém regras como "a função deve ter apenas um único ponto de saída". Obviamente, você normalmente não precisa desses diagnósticos, então eles estão desativados por padrão. Nota: " Como verificar rapidamente avisos interessantes fornecidos pelo analisador PVS-Studio para códigos C e C ++? ".
  2. O filtro Você pode filtrar as mensagens por código, CWE, texto, projeto ou arquivo.
  3. O número da linha de disparo. Alguns diagnósticos podem se referir a várias linhas: esses avisos possuem reticências ao lado do número da linha.

SAST


O PVS-Studio é uma ferramenta para teste de segurança de aplicativos estáticos (SAST), o que significa que ele pode detectar possíveis vulnerabilidades no código-fonte e mostrar o identificador de fraqueza correspondente de acordo com uma classificação específica.

O PVS-Studio suporta as seguintes classificações de fraqueza:

  1. CWE
  2. SEI CERT
  3. Misra

Para ativar os códigos CWE, abra o menu suspenso da janela do analisador e marque Mostrar colunas> CWE

Figura 4. Ativando códigos CWE no menu suspenso.

Figura 4. Ativando códigos CWE no menu suspenso.

Outra maneira de fazer isso é Extensões> PVS-Studio> Exibir códigos CWE na janela Saída na barra de menus do Visual Studio

Figura 5. Submenu PVS-Studio no menu Extensões.

Figura 5. Submenu PVS-Studio no menu Extensões.

Diferentemente disso, os diagnósticos MISRA são ativados na janela de opções:

Figura 6. Lista de pontos fracos detectáveis.

Figura 6. Lista de pontos fracos detectáveis.

Você pode aprender mais sobre essas classificações aqui .

Verificando Projetos na Linha de Comandos


PVS-Studio_Cmd.exe é um utilitário para verificar projetos e soluções em C ++ .vcxproj na linha de comando. Pode ser útil se você deseja automatizar o processo de análise. O programa pode ser encontrado no diretório de instalação, que é 'C: \ Arquivos de Programas (x86) \ PVS-Studio' por padrão.

O utilitário possui vários parâmetros , mas você precisará de apenas três para começar:
  • --target: o arquivo do projeto ou solução a ser verificado.
  • --output: o arquivo plog no qual o relatório de análise é armazenado.
  • --progress: rastreia o progresso da análise.

Isto é o que você verá após iniciar a verificação:

Figura 7. Saída do utilitário PVS-Studio_Cmd.exe

Figura 7. Saída do utilitário PVS-Studio_Cmd.exe

Depois que a verificação for concluída, um arquivo plog contendo o relatório de análise será criado no diretório especificado nos parâmetros de início. Este relatório pode ser convertido em outros formatos usando o utilitário PlogConverter.exe e, se você deseja abrir o relatório no IDE, basta clicar duas vezes no arquivo plog no Windows Explorer.

O arquivo de relatório também pode ser aberto no menu Extensões: Extensões> PVS-Studio> Abrir / Salvar> Abrir relatório de análise ...

Figura 8. Abrindo um relatório de análise no menu do plug-in.

Figura 8. Abrindo um relatório de análise no menu do plug-in.

Consulte a documentação para obter detalhes sobre o utilitário e seus parâmetros.

Suprimindo falsos positivos


O analisador fornece uma variedade de meios para suprimir falsos positivos. Eles são descritos em detalhes nas seguintes seções:

  • Ajuste fino .
  • Supressão em massa , que é especialmente útil quando você deseja suprimir apenas os avisos que se referem a código novo ou modificado.

Aviso de amostra


Vamos dar uma olhada em um exemplo de aviso emitido pelo analisador. O seguinte snippet de código é obtido do projeto ReactOS:

VOID NTAPI AtapiDmaInit(....) { .... ULONG treg = 0x54 + (dev < 3) ? (dev << 1) : 7; .... } 

Mensagem de diagnóstico do PVS-Studio: V502 Talvez o operador '?:' Funcione de maneira diferente do esperado. O operador '?:' Tem uma prioridade mais baixa que o operador '+'. uniata id_dma.cpp 1610

A expressão 0x54 + (dev <3) sempre será avaliada como verdadeira : a constante não nula 0x54 é adicionada primeiro ao resultado da expressão (dev <3) , que pode ser avaliada como 0 ou 1 e somente então é a valor resultante comparado com zero.

É assim que a versão correta se parece:

 VOID NTAPI AtapiDmaInit(....) { .... ULONG treg = 0x54 + ((dev < 3) ? (dev << 1) : 7); .... } 

Resolvemos o problema colocando a operação '?:' Entre parênteses, para que seu resultado agora dependa do resultado da expressão (dev <3) .

Conclusão


Essa foi uma breve introdução à introdução ao PVS-Studio for Visual C ++. Obviamente, ele não cobre todos os aspectos, portanto seja bem-vindo ao nosso blog , onde explicamos em detalhes como trabalhar com o analisador e consulte a documentação para obter descrições completas das mensagens de diagnóstico e configurações da ferramenta.

Source: https://habr.com/ru/post/pt461007/


All Articles