Escolher uma ferramenta de análise estática de código

votos
54

Eu estou trabalhando em um projeto onde eu estou codificação em C em um ambiente UNIX. Eu tenho usado a ferramenta fiapos para verificar o meu código fonte. Lint tem sido em torno de um longo tempo (desde 1979), alguém pode sugerir uma ferramenta de análise de código mais recente que eu poderia usar? De preferência, uma ferramenta que é livre.

Publicado 05/08/2008 em 22:19
fonte usuário
Em outras línguas...                            


15 respostas

votos
30

Não negligencie o compilador em si.

Leia a documentação do compilador e encontrar todos os avisos e erros que podem fornecer, em seguida, permitir a todos quantos fazem sentido para você.

Também certifique-se de dizer ao seu compilador para tratar avisos como erros para que você é forçado a corrigi-los imediatamente. ( "-Werror" na gcc)

Também: "-Wall" na gcc se não permitir que todos os avisos, não se deixe enganar.

Além disso também: confira valgrind - é "automaticamente detectar [s] muitos erros de gerenciamento de memória e threading, e perfil [s] seus programas em detalhe." (Grátis!)

Valgrind não é um verificador estático, mas é uma grande ferramenta! http://valgrind.org

Respondeu 05/08/2008 em 23:17
fonte usuário

votos
14

Para código C, você definitivamente deve definitivamente usar Flexelint . Usei-o por quase 15 anos e jurar por ele. Um dos realmente grandes características que tem é que as advertências pode ser transformado seletivamente desligar e ligar através de comentários no código ( "/ * fiapos -e123 * /"). Este acabou por ser um instrumento de documentação poderosa quando você queria algo fora do comum. "Estou desligando aviso X, portanto, há alguma boa razão que eu estou fazendo X."

Para qualquer um em perguntas interessantes C / C ++, olhar para alguns dos seus exemplos em seu site e veja se você pode descobrir os erros sem olhar para as dicas.

Respondeu 05/08/2008 em 22:42
fonte usuário

votos
12

Eu já ouvi coisas boas sobre analisador estático clang , que IIRC usa LLVM como é backend. Se isso é implementada em sua plataforma, que pode ser uma boa escolha.

Pelo que eu entendo, ele faz um pouco mais do que a análise apenas sintaxe. "Finding Bug Automatic", por exemplo.

Respondeu 06/08/2008 em 01:40
fonte usuário

votos
5

Recentemente, compilou uma lista de todas as ferramentas de análise estática que tive à minha disposição, eu ainda estou no processo de avaliação de todos eles. A nota, estas são principalmente ferramentas de análise de segurança.

Respondeu 03/09/2008 em 23:11
fonte usuário

votos
5

Temos vindo a utilizar Coverity Prevenir para verificar o código-fonte C ++.

Não é uma ferramenta gratuita (embora eu acredite que eles oferecem varredura livre para projetos de código aberto), mas é uma das melhores ferramentas de análise estática que você vai encontrar. Eu ouvi dizer que é ainda mais impressionante em C do que em C ++, mas nos ajudou a evitar um grande número de erros até agora.

Respondeu 15/08/2008 em 18:47
fonte usuário

votos
4

Você pode usar cppcheck . É um fácil de usar ferramenta de análise estática de código.
Por exemplo:
cppcheck --enable=all .
irá verificar todos os arquivos C / C ++ na pasta atual.

Respondeu 25/06/2015 em 15:54
fonte usuário

votos
1

Você pode tentar CppDepend , um analisador estático bastante completo disponível no Windows e Linux, throught VS Plugin, IDE ou linha de comandos, e é livre para contribuidores de código aberto

Respondeu 26/06/2015 em 12:01
fonte usuário

votos
1

PC-lint / Flexelint são muito poderosos e ferramentas de análise estática úteis, e altamente configurável, embora, infelizmente, não é livre.

Quando pela primeira vez usando uma ferramenta como esta, eles podem produzir um grande número de advertências, o que pode tornar difícil diferenciar entre os maiores e menores. Portanto, é melhor para começar a usar a ferramenta em seu código como no início do projeto quanto possível, e, em seguida, executá-lo em seu código o mais rápido possível, para que você possa lidar com novas advertências como eles vêm para cima.

Com o uso contínuo como este, você logo aprender a escrever o seu código de uma maneira que confirma com as regras aplicadas pela ferramenta.

Devido a isso, eu prefiro ferramentas como Lint que funcionam de forma relativamente rápida, e assim incentivar o uso contínuo, em vez das ferramentas mais pesados ​​que você pode acabar usando menos frequência, se em tudo.

Respondeu 20/12/2008 em 00:29
fonte usuário

votos
1

ferramentas Lint-como geralmente sofrem de um problema "alarme falso": eles relatam muito mais problemas do que realmente existem. Se a proporção de avisos genuinamente-úteis é muito baixo, o usuário aprende a simplesmente ignorar a ferramenta. Mais ferramentas modernas gastar algum esforço para se concentrar nas advertências mais prováveis ​​/ interessante.

Respondeu 23/08/2008 em 15:29
fonte usuário

votos
1

Você pode encontrar a ferramenta Uno útil. É uma das poucas opções gratuitas não-brinquedo. Difere de fiapos, Flexelint, etc, em concentrando-se em um pequeno número de erros "semânticas" (derefs ponteiro nulo, índices da matriz está fora dos limites, e o uso de variáveis não inicializados). Ele também permite verificações definidas pelo usuário, como disciplina lock-unlock.

Eu estou trabalhando para um lançamento público de uma ferramenta sucessor, Orion ( conteúdo não está mais disponível )

Respondeu 15/08/2008 em 23:39
fonte usuário

votos
0

Esparsos é uma ferramenta de software de computador, já está disponível no Linux, projetado para encontrar possíveis falhas de codificação no kernel Linux.

Existem dois projetos ativos de Linux Verificação Centro destinadas a melhorar a qualidade dos módulos do kernel carregáveis.

  1. Verificação Linux Driver (LDV) - um conjunto de ferramentas abrangente para a verificação de código fonte estática de drivers de dispositivo Linux.
  2. KEDR Framework - uma estrutura extensível para análise dinâmica e verificação dos módulos do kernel.
  3. Outro projeto em andamento é o Linux arquivo de verificação do sistema que visa desenvolver um conjunto de ferramentas dedicada para verificação das implementações do sistema de arquivos Linux.
Respondeu 20/12/2012 em 08:36
fonte usuário

votos
0

Descobri que é geralmente melhor usar várias ferramentas de análise estática para encontrar bugs. Cada ferramenta é projetada de forma diferente, e eles podem encontrar coisas muito diferentes um do outro.

Existem algumas boas discussões em algumas das conversas aqui . É a partir de uma conferência realizada pelo Departamento de Segurança Interna dos EUA na análise estática.

Respondeu 15/06/2011 em 07:53
fonte usuário

votos
0

G'day,

Eu concordo totalmente com as sugestões para ler e digerir o que o compilador está dizendo a você depois de definir -Wall.

Uma boa ferramenta de análise estática para a segurança é FLAWFINDER escrito por David Wheeler. Ele faz um bom trabalho em busca de várias falhas de segurança,

No entanto, ele não substitui ter um alguém qualificado ler através de seu código. Como David diz em sua página web, "Um tolo com uma ferramenta ainda é um tolo!"

Felicidades,

Roubar

Respondeu 26/08/2008 em 16:21
fonte usuário

votos
0

lint é constantemente atualizado ... então por que você quer um mais recente.

BTW flexelint é lint

Respondeu 23/08/2008 em 12:42
fonte usuário

votos
0

Há um "-Weffc ++" opção para gcc que de acordo com a página do manual do Mac OS X irá:

Alertar sobre violações das seguintes diretrizes de estilo de livro de Scott Meyers' Effective C ++:

[recorte]

Eu sei que você perguntou sobre C, mas este é o mais próximo que eu conheço ..

Respondeu 15/08/2008 em 23:03
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more