O Codechecker é uma infraestrutura de análise estática criada na cadeia de ferramentas do analisador estático LLVM/CLANG, substituindo scan-build em um ambiente de desenvolvimento Linux ou MacOS (OS X).

Confira nossa demonstração mostrando alguns resultados de análise de projetos de código aberto!
Executa o analisador estático de Clang-Tidy , com análise de unidade de translação cruzada, análise estatística (quando os verificadores estão disponíveis), CPPCHECK , GCC Static Analyzer e o Facebook Inferem Analyzer .
Cria o banco de dados de compilação JSON, com o processo de construção de qualquer processo de compilação (por exemplo, CodeChecker log -b "make" ).
Analisa automaticamente projetos com compilados cruzados do GCC: detectando a configuração do compilador GCC ou CLANG e formando as invocações correspondentes do analisador CLANG.
Análise incremental: apenas os arquivos alterados e suas dependências precisam ser reanalisados.
Falsa positiva supressão com a possibilidade de adicionar comentários de revisão.
Visualização de resultado na linha de comando ou em HTML estático.
Você pode armazenar e visualizar milhares de relatórios de análise de muitos analisadores como Clang Static Analyzer (C/C ++), Clang Tidy (C/C ++), Facebook inferir (C/C ++, Java), desinfetantes de CLANG (C/C ++), Spotbugs (Java), Pylint (Python), Slint (JAVCUGS), JAVRING ...
Para uma lista completa, consulte os analisadores suportados
Aplicativo da Web para visualização Defeitos de código descobertos com uma experiência fácil e simplificada (com o backend PostGresql ou SQLite).
A integração Gerrit e Gitlab mostra os resultados da análise como revisões do GitLab ou Gerrit.
Filtrável (nome do verificador de defeito, gravidade, caminhos de origem, ...) e comparável (calcula a diferença entre duas análises do projeto, mostrando quais bugs foram corrigidos e quais são introduzidos recentemente).
Modo Diff: Isso mostra a lista de bugs que foram introduzidos desde a sua última execução do analisador.
Os resultados podem ser compartilhados com colegas desenvolvedores, o sistema de comentários e revisão ajuda a comunicação de defeitos de código.
Comunicação de client-client baseada em economia facilmente implementável usada para armazenar e consultar defeitos descobertos.
Suporte para múltiplos frontendes de visualização de erros, como o aplicativo da Web, uma ferramenta de linha de comando e um plug-in Eclipse.
O comando CodeChecker possui muitos subcomando que podem ser usados, por exemplo, para registrar e analisar seus projetos, imprimir os resultados ou iniciar um servidor da Web. Para uma lista completa, consulte a tabela a seguir ou verifique a mensagem de ajuda deste comando ( CodeChecker --help ):
Subcomando CodeChecker | Descrição |
|---|---|
analyze | Execute os analisadores de código suportados para os arquivos gravados em um banco de dados de compilação JSON. |
analyzer-version | Imprima a versão do pacote de analisador Codechecker que está sendo usado. |
analyzers | Analisadores de lista suportados e disponíveis. |
check | Execute a análise em um projeto e imprima os resultados para a saída padrão. |
checkers | Liste os verificadores disponíveis para análise de código. |
cmd | Veja os resultados da análise em um servidor em execução na linha de comando. |
fixit | Aplique correções automáticas com base nas sugestões dos analisadores. |
log | Execute um comando de compilação, colete os comandos de compilação executada e armazene -os em um arquivo json. |
parse | Resumo da análise de impressão e resultados em um formato legível pelo homem. |
server | Inicie e gerencie o servidor da Web Codechecker. |
store | Salvar resultados de análise em um banco de dados. |
version | Imprima a versão do pacote Codechecker que está sendo usado. |
web-version | Imprima a versão do pacote Codechecker Server que está sendo usado. |
O Subcomando CodeChecker cmd também possui muitos outros subcomando que podem ser usados para obter dados (produtos, execuções, resultados, estatísticas) de um servidor Codechecker em execução. Para uma lista completa, consulte a tabela a seguir ou verifique a mensagem de ajuda deste subcomando ( CodeChecker cmd --help ):
Subcomando CodeChecker cmd | Descrição |
|---|---|
runs | Liste as análises disponíveis. |
history | Mostre histórico de várias corridas. |
results | Resultado da análise da lista (encontrando) Resumo para uma determinada corrida. |
diff | Compare duas análises e mostre a diferença. |
sum | Mostrar estatísticas de damas. |
token | Subcomando de acesso relacionados à configuração de tokens de acesso pessoal gerenciados por um servidor Codechecker. |
del | Excluir análises executadas. |
update | Atualizar uma análise de análise. |
suppress | Gerenciar e importar supressões de relatórios em um servidor Codechecker. |
products | Subcomando de acesso relacionados à configuração dos produtos gerenciados por um servidor Codechecker. |
components | Subcomando de acesso relacionados à configuração dos componentes de origem gerenciados por um servidor Codechecker. |
login | Autentique nos servidores Codechecker que requerem privilégios. |
export | Exportar comentários e revisar os status do Codechecker. |
import | Importar comentários e revisar os status para o Codechecker. |

Etapa 1 : CodeChecker log executa o comando de compilação fornecido e registra as etapas de compilação executadas. Essas etapas são gravadas em um arquivo de saída (banco de dados de compilação) em um formato JSON.
Etapa 2 : CodeChecker analyze usa o banco de dados de compilação JSON criado anteriormente para executar uma análise no projeto, a análise de saída resulta em um formato legível por máquina (PLIST).
Etapa 3 : Nesta etapa, você pode fazer várias coisas:
Parse e impressão bonita do resumo e resultados dos arquivos de resultados da análise ( CodeChecker parse ).
Armazene os resultados em um servidor Codechecker em execução ( CodeChecker store ).
Compare dois resultados/execuções de análise para mostrar os resultados que diferem entre os dois ( CodeChecker cmd diff ).
etc.
Para obter mais informações, como usar o Codechecker, consulte nosso Guia do Usuário.
Introdução (como fazer com exemplos)
Guia do usuário do analisador
Evitando ou suprimindo falsos positivos
Configuração do verificador e analisador estático
Incompatibilidades do GCC
Suprimir falsos positivos
Guia do usuário do servidor da web
Guia do usuário da GUI da web
Linha de comando e Visão geral do recurso de interface do usuário da web
Configuração de segurança
Configurando a autenticação
Configurando a autorização
Implantação
Implantar servidor usando o Docker
Configuração do servidor
Configurando o log do servidor
Configurando vários repositórios Codechecker em um servidor
Integração contínua (IC)
Codechecker como uma ação do github
Configuração do CI Gating com Gerrit e Jenkins
Configuração do banco de dados
Guia de configuração de back -end do PostGresql
Guia de atualização do esquema de servidor e banco de dados Codechecker
O Codechecker pode ser usado como uma ferramenta genérica para visualizar os resultados do analisador.
As seguintes ferramentas são suportadas:
| Linguagem | Analisador |
|---|---|
| C/C ++ | Analisador estático de clang |
| Clang arrumado | |
| Desinfetantes de clang | |
| Cppcheck | |
| Facebook inferir | |
| Coccinelle | |
| Smatch | |
| Kernel-Doc | |
| Escasso | |
| cpplint | |
| C# | Roslynator.dotnet.cli |
| Java | Spotbugs |
| Facebook inferir | |
| Python | Pylint |
| Pyflakes | |
| JavaScript | Eslint |
| TypeScript | Tslint |
| Ir | Golint |
| Markdown | Markdownlint |
| Esfinge |
Para detalhes, consulte a documentação dos analisadores de código suportados e a ferramenta de conversor do relatório.
Ferramentas úteis que também podem ser usadas fora do Codechecker.
Build Logger (para gerar banco de dados de compilação JSON a partir de suas compilações)
Conversor de Plist/Sarif para HTML (para gerar arquivos HTML a partir dos arquivos Plist ou SARIF fornecidos)
Relatório Ferramenta de conversor (para converter os resultados da análise de outros analisadores para o formato do diretório de relatórios Codechecker))
Coletor da unidade de tradução (para coletar arquivos de origem de uma unidade de tradução ou obter arquivos de origem que dependem dos arquivos de cabeçalho fornecidos)
Relatório Gerador de hash (para gerar identificadores de hash exclusivos para relatórios)
Scripts auxiliares para análise diária
pipCodechecker está disponível no Pypi e pode ser instalado com o seguinte comando:
PIP3 Instale o Codechecker
Nota: Este pacote pode ser instalado nos sistemas Linux , OSX e Windows , onde o comando pip3 está disponível. No OSX , intercept-build deve ser instalada para log ( CodeChecker log ). No Windows , o log não está disponível.
snapO Codechecker está disponível no Snap Store e pode ser instalado com o seguinte comando:
sudo snap install codechecker -clássico
NOTA: Infelizmente, o pacote Snap suporta apenas nomes de comando em caso inferior. Por esse motivo, você precisa usar o comando codechecker em vez de CodeChecker em todos os lugares. Para uma lista completa dos comandos disponíveis no pacote Snap Codechecker , execute snap info codechecker .
Para uma lista de dependência detalhada e para obter instruções sobre como instalar versões mais recentes de Clang e Clang-Tidy, consulte os requisitos. Os seguintes comandos são usados para inicializar o Codechecker no Ubuntu 20.04 LTS:
# Instale dependências obrigatórias para um ambiente de desenvolvimento e análise.# Nota: Clang ou Clang-Tidy pode ser uma versão suficientemente fresca e não precisa# vem do gerenciador de pacotes!# No caso do CPPCHECK, a versão mínima suportada é 1.80. CLANG-TIDY CPPCHECK G ++ Build-essencial Curl
GCC-Multilib Git Python3-Dev Python3-Venv Python3-SetupPools# No caso de Venv_Dev Target e Ubuntu 23 Linux, instale uma biblioteca adicional: sudo apt-get install libpq-dev# install odejs dependência para web. No caso de Debian/Ubuntu, você pode usar os seguintes comandos a seguir. Para mais informações, consulte os documentos oficiais:# https://nodejs.org/en/download/package-manager/curl -sl https://deb.nodesource.com/setup_16.x | sudo -e bash -
sudo apt -get install -y nodejs# confira o código fonte do codechecker.git clone https://github.com/ericSson/codechecker.git ---depth 1 ~/codecheckercd ~/codechecker# criar um python virtualEnv e usar o seu ambiente. `venv`.make venvSource $ pwd/venv/bin/ative# [opcional] Se você deseja usar métodos de autenticação externos (ldap/pam)# siga as instruções em# docs/web/autentication.md# externo-autenticação-methods e instalar um pacote de codecheck. Path = "$ PWD/Build/Codechecker/Bin: $ PATH" CD ..Notas :
Por padrão, make package criará objetos compartilhados LDLogger para 32bit e 64bit também. Se você deseja construir e embalar 64 bit only e binário ldlogger, poderá definir a variável de ambiente BUILD_LOGGER_64_BIT_ONLY para YES antes do pacote Build: BUILD_LOGGER_64_BIT_ONLY=YES make package .
Por padrão, o make package criará o código da interface do usuário se ainda não estiver construído ou o código da interface do usuário for alterado. Se você não deseja criar o código da interface do usuário, pode definir a variável de ambiente BUILD_UI_DIST como NO antes da compilação do pacote: BUILD_UI_DIST=NO make package .
Use make standalone_package em vez de make package para evitar a necessidade de ativar manualmente o ambiente antes de executar o Codechecker.
Se você atualizou o Python do seu sistema para uma versão mais recente (por exemplo, de 3.8 para 3.11 -esse é o caso ao atualizar o Ubuntu de 20.04 LTS para 22,04 LTS), o ambiente instalado não funcionará fora do time. Para corrigir esse problema, execute o seguinte comando para atualizar seu checker_env também:
CD ~/Codechecker/Venv Python3 -M Venv.
Para instruções de instalação para o Mac OS X, consulte a documentação do guia de instalação do Mac OS X.
Para executar o servidor Codechecker no Docker, consulte a documentação do Docker. Você pode encontrar o contêiner Codechecker Web-Server no Docker Hub.
Você pode instalar e usar a extensão do Codechecker VSCODE do Visual Studio Marketplace ou do Open VSX.
Principais recursos:
Execute a análise Codechecker do editor e veja os resultados automaticamente.
Reanalise o arquivo atual quando salvo.
Comandos e criam tarefas para executar o Codechecker como parte de um sistema de construção.
Navegue pelos relatórios encontrados e mostre as etapas de reprodução diretamente no código.
Navegue entre as etapas de reprodução.

Para obter mais informações sobre como instalar e usar este plug -in, consulte o repositório desta extensão.

O Codechecker pode ser executado por meio de uma ação reutilizável do GitHub para o seu projeto! Você só precisa especificar o comando de compilação, como se você executasse a análise localmente.
Para obter mais informações, consulte a ação de análise estática Codechecker no mercado de ações do GitHub.
Essas etapas devem sempre ser tomadas em um novo prompt de comando em que você deseja executar a análise.
source ~/codechecker/venv/bin/activate# Path of CodeChecker package# NOTE: SKIP this line if you want to always specify CodeChecker's full path.export PATH=~/codechecker/build/CodeChecker/bin:$PATH# Path of the built LLVM/Clang# NOTE: SKIP this line if clang is available in your PATH as an installed Linux package.export PATH=~/<user caminho>/build/bin: $ path
Analise seu projeto com o comando check :
CodeChecker check -b "cd ~/your-project && make clean && make" -o ./results
check imprimirá uma visão geral dos problemas encontrados em seu projeto pelos analisadores. Os relatórios serão armazenados no diretório ./results no formato plist XML.
Você pode visualizar os resultados como HTML estático executando
CodeChecker parse -e html ./results -o ./reports_html
Uma página de índice será gerada com uma lista de todos os repates em ./reports_html/index.html
Se você tiver centenas de resultados, poderá armazená -los no servidor da web com um back -end de banco de dados.
Inicie um servidor da Web e armazenamento Codechecker em outro terminal ou como um processo em segundo plano. Por padrão, ele ouvirá no localhost:8001 .
O banco de dados SQLITE que contém os relatórios será colocado no seu diretório de espaço de trabalho ( ~/.codechecker por padrão), que pode ser fornecido através do sinalizador -w .
CodeChecker server
Armazene seus relatórios de análise no servidor para poder usar o visualizador da web.
CodeChecker store ./results -n my-project
Abra o Visualizador da Web Codechecker no seu navegador e você deve ser recebido com um aplicativo da Web mostrando os resultados da análise.
Arquitetura
Layout do pacote
Dependências
Interface de economia
Testes de pacote e integração
Uma visão geral sobre a infraestrutura do Codechecker foi fornecida no PLDI 2020.
Márton, Gábor e Krupp, Dániel :
Talk Tool: Codechecker
Uma visão geral de alto nível sobre a infraestrutura está disponível entre as apresentações da Conferência da Euro LLVM de 2015.
Krupp, Dániel e Orbán, György e Horváth, Gábor e Babati, Bence :
Experiências industriais com o conjunto de ferramentas de análise estática CLANG