Pergunta

Eu preciso de uma ferramenta que analisa fontes de C ++ e diz que o código não é utilizado. Tamanho da fonte é ~ 500MB

Foi útil?

Solução

PC-Lint é bom. Se ele precisa ser livre de código aberto / suas escolhas diminuir. Cppcheck é livre, e irá verificar para funções privadas não utilizadas. Eu não acho que ele se parece para coisas como as classes instanciadas como PC-Lint.

Outras dicas

Mais uma vez, eu vou jogar AQTime na discussão. Tem análise estática de código para a maioria, se não todos, dos idiomas suportados. Eu realmente não entrar nessa parte, porém, I usado principalmente os perfis dinâmicos (memória, desempenho e assim por diante).

Você pode usar uma ferramenta de cobertura de código (análise dinâmica) para ter uma idéia de que o código não é sendo executado e, em seguida, mão analisar para ver se esse código é realmente inútil.

Se você quer uma análise estática, você precisa de uma ferramenta que pode ler o inteiro 500 MB de código fonte (est. 20 milhões de linhas? Uau!) E compute um estimativa conservadora do que é usado. Isto requer fazer um pontos-to análise sobre todo o sistema.

Aqui está o porquê: Se você deixar de fora qualquer módulo Z, e decidir que FOO não é utilizada, você pode descobrir mais tarde que Z passou a ser a única que FOO usado, ou mais sutilmente, Z copiado um valor de ponteiro que passou a ter & FOO nele a um terceiro módulo M, que por sua vez chamou a função "não utilizado" throught o ponteiro.

O que isto significa é que nenhuma ferramenta de análise estática que lê apenas módulos individuais (unidades de compilação) pode responder a esta pergunta de forma segura. E em sua escala, você não pode dar ao luxo de cometer erros idiotas.

A minha empresa, Semantic Designs tem pontos-para FEITO análise por 35 milhões de sistemas de linha de código C usando o nosso DMS Software Reengineering Toolkit. DMS pode ler muito grandes sistemas de código-fonte. Foi necessária uma ferramenta personalizada, não tanto porque o código fonte foi em uma estranha (Archiac) dialeto do C ++ (sistemas em dialetos extremamente modernos não pode ser tão grande, não há tempo suficiente para o código-los!), mas sim porque, em sistemas muito grandes há outros fatores peculiares em jogo. Para o sistema de C que fizemos, houve uma dinâmica vinculador costume, e que afetou os pontos-de análise, que por sua vez tinha que ser personalizado.

Como os sistemas da escala que você está discutindo sempre tem surpresas como esta (BIBSEH: "Porque em grandes sistemas, tudo acontece"), você vai provavelmente precisará de uma ferramenta personalizada para responder à pergunta. DMS é projetado ser personalizado. Consulte http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html e http://www.semanticdesigns.com/Products/FrontEnds/CppFrontEnd.html

ferramenta de cobertura de código é o que você precisa, mas você terá que executar o nosso programa através de todas as funcionalidades e ver o que é repoted como não utilizados. Desde que o código pode ser DLL funções exportadas você terá que ter certeza que nada usa-los externamente. Algumas ferramentas de cobertura de código:. Purify, CTC ++, boundschecker podem ter funcionalidade de cobertura de código, se bem me lembro e um monte de outras ferramentas

Tenha muito cuidado com a remoção de qualquer função que pode ter sido exportada sem saber o programa externo pode estar ligando / usá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top