Pergunta

Estou trabalhando em um projeto onde estou codificando em C em um ambiente UNIX.Tenho usado a ferramenta lint para verificar meu código-fonte.O Lint existe há muito tempo (desde 1979). Alguém pode sugerir uma ferramenta de análise de código mais recente que eu possa usar?De preferência uma ferramenta gratuita.

Foi útil?

Solução

Não negligencie o próprio compilador.

Leia a documentação do compilador e encontre todos os avisos e erros que ele pode fornecer e, em seguida, habilite quantos fizerem sentido para você.

Certifique-se também de dizer ao seu compilador para tratar os avisos como erros, para que você seja forçado a corrigi-los imediatamente.("-Werror" no gcc)

Também:"-Wall" no gcc faz não habilite todos os avisos, não se deixe enganar.

Também também:confira valgrind (grátis!) - ele "detecta automaticamente muitos bugs de gerenciamento de memória e threading e cria perfis de seus programas em detalhes."

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

Outras dicas

Para código C, você definitivamente deveria usar Flexelint.Usei-o por quase 15 anos e juro por ele.Um dos recursos realmente excelentes é que os avisos podem ser desativados e ativados seletivamente por meio de comentários no código ("/* lint -e123*/").Esta acabou sendo uma ferramenta de documentação poderosa quando você queria algo fora do comum."Estou desativando o aviso X, portanto, há um bom motivo para estar fazendo X."

Para qualquer pessoa interessada em questões interessantes sobre C/C++, veja alguns de seus exemplos em seu site e veja se você consegue descobrir os bugs sem olhar as dicas.

Já ouvi coisas boas sobre analisador estático clang, que o IIRC usa LLVM como back-end.Se isso for implementado em sua plataforma, pode ser uma boa escolha.

Pelo que entendi, faz um pouco mais do que apenas análise de sintaxe."Localização automática de bugs", por exemplo.

Nós temos usado Prevenção de cobertura para verificar o código-fonte C++.

Não é uma ferramenta gratuita (embora eu acredite que eles oferecem digitalização gratuita para projetos de código aberto), mas é uma das melhores ferramentas de análise estática que você encontrará.Ouvi dizer que é ainda mais impressionante em C do que em C++, mas nos ajudou a evitar vários bugs até agora.

Recentemente compilei uma lista de todas as ferramentas de análise estática que tinha à minha disposição, ainda estou avaliando todas elas.Observe que essas são principalmente ferramentas de análise de segurança.

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

Ferramentas semelhantes ao Lint geralmente sofrem de um problema de "alarme falso":eles relatam muito mais problemas do que realmente existem.Se a proporção de avisos genuinamente úteis for muito baixa, o usuário aprende a simplesmente ignorar a ferramenta.Ferramentas mais modernas despendem algum esforço para focar nos avisos mais prováveis/interessantes.

PC-lint/Flexelint são ferramentas de análise estática muito poderosas e úteis e altamente configuráveis, embora infelizmente não sejam gratuitas.

Ao usar uma ferramenta como essa pela primeira vez, eles podem produzir um grande número de avisos, o que pode dificultar a diferenciação entre avisos maiores e menores.Portanto, é melhor começar a usar a ferramenta no seu código o mais cedo possível no projeto e, em seguida, executá-la no seu código com a maior freqüência possível, para que você possa lidar com novos avisos à medida que surgirem.

Com um uso contínuo como esse, você logo aprenderá a escrever seu código de uma forma que esteja de acordo com as regras aplicadas pela ferramenta.

Por causa disso, prefiro ferramentas como o Lint, que são executadas de forma relativamente rápida e, portanto, incentivam o uso contínuo, em vez de ferramentas mais pesadas, que você pode acabar usando com menos frequência, se for o caso.

Podes tentar CppDepend, um analisador estático bastante completo disponível em windows e linux, através de VS Plugin, IDE ou linha de comando, e é gratuito para contribuidores de código aberto

Você pode encontrar o Uma ferramenta útil.É uma das poucas opções gratuitas que não são brinquedos.É diferente de lint, Flexelint, etc.ao focar em um pequeno número de erros "semânticos" (derefs de ponteiro nulo, índices de array fora dos limites e uso de variáveis ​​​​não inicializadas).Ele também permite verificações definidas pelo usuário, como disciplina de bloqueio-desbloqueio.

Estou trabalhando para o lançamento público de uma ferramenta sucessora, Órion (CONTEÚDO NÃO DISPONÍVEL MAIS)

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

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

[recorte]

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

fiapos é constantemente atualizado...então por que você iria querer um mais recente?

Aliás, flexelint é fiapos

Bom dia,

Concordo totalmente com as sugestões para ler e digerir o que o compilador está lhe dizendo após configurar -Wall.

Uma boa ferramenta de análise estática para segurança é Localizador de falhas escrito por David Wheeler.Ele faz um bom trabalho procurando várias explorações de segurança,

No entanto, isso não substitui ter alguém com conhecimento lendo seu código.Como David diz em sua página web: “Um tolo com uma ferramenta ainda é um tolo!”

saúde,

Roubar

Descobri que geralmente é melhor usar várias ferramentas de análise estática para encontrar bugs.Cada ferramenta é projetada de forma diferente e elas podem encontrar coisas muito diferentes umas das outras.

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

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

Existem dois projetos ativos de Centro de verificação Linux teve como objetivo melhorar a qualidade dos módulos carregáveis ​​do kernel.

  1. Verificação de driver Linux (LDV) - um conjunto de ferramentas abrangente para verificação estática de código-fonte de drivers de dispositivos Linux.
  2. KEDR Framework - uma estrutura extensível para análise dinâmica e verificação de módulos do kernel.
  3. Outro projeto em andamento é o Linux File System Verification, que visa desenvolver um conjunto de ferramentas dedicado para verificação de implementações de sistemas de arquivos Linux.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top