CodeCheckerは、LLVM/Clang Static Analyzerツールチェーンに基づいて構築された静的分析インフラストラクチャであり、LinuxまたはMacOS(OS X)開発環境のscan-buildを置き換えます。

オープンソースプロジェクトの分析結果を示すデモをご覧ください!
Clang-Tidy 、 Clang Static Analyzerをクロス翻訳ユニット分析、統計分析(チェッカーが利用可能な場合)、 CPPCheck 、 GCC Static Analyzer 、 Facebook Imper Analyzerを実行します。
任意のビルドプロセス( CodeChecker log -b "make" )を盗聴することにより、JSONコンピレーションデータベースを作成します。
GCCのクロスコンパイルプロジェクトを自動的に分析します。GCCまたはClangコンパイラ構成の検出と、対応するClang Analyzerの呼び出しを形成します。
増分分析:変更されたファイルとその依存関係のみを再分析する必要があります。
レビューコメントを追加する可能性を伴う誤った陽性の抑制。
コマンドラインまたは静的HTMLの結果視覚化。
Clang Static Analyzer(C/C ++)、Clang Tidy(C/C ++)、Facebook Imber(C/C ++、Java)、Clang Sanitizers(C/C ++)、SpotBugs(Java)、Pylint(Python)、 Eslint (Javascript)など、多くの分析装置の数千の分析レポートを保存および視覚化できます。
完全なリストについては、サポートされているアナライザーを参照してください
合理化された簡単なエクスペリエンス(PostgreSQL、またはSQLiteバックエンド)で発見されたコード欠陥を表示するためのWebアプリケーション。
GerritとGitlabの統合は、 GitlabまたはGerritのレビューとして分析の結果を示しています。
フィルタブル(欠陥チェッカー名、重大度、ソースパスなど...)と同等(プロジェクトの2つの分析の差を計算し、どのバグが修正され、どのバグが新しく導入されているかを示します)結果視聴。
DIFFモード:これは、最後のアナライザー実行以来導入されたバグのリストを示しています。
結果は仲間の開発者と共有でき、コメントとレビューシステムはコード欠陥の通信に役立ちます。
発見された欠陥の保存とクエリに使用される、簡単に実装可能なThriftベースのサーバークライアント通信。
Webアプリケーション、コマンドラインツール、Eclipseプラグインなど、複数のバグ視覚化フロントエンドのサポート。
CodeCheckerコマンドには、プロジェクトのログと分析、結果の印刷、Webサーバーの起動に使用できる多くのサブコマンドがあります。完全なリストについては、次のテーブルを参照するか、このコマンドのヘルプメッセージ( CodeChecker --help )を確認してください。
CodeCheckerサブコマンド | 説明 |
|---|---|
analyze | JSONコンピレーションデータベースに記録されたファイルのサポートされているコードアナライザーを実行します。 |
analyzer-version | 使用されているCodeChecker Analyzerパッケージのバージョンを印刷します。 |
analyzers | サポートされた利用可能なアナライザーをリストします。 |
check | プロジェクトの分析を実行し、結果を標準出力に印刷します。 |
checkers | コード分析に利用できるチェッカーをリストします。 |
cmd | コマンドラインから実行中のサーバーで分析の結果を表示します。 |
fixit | アナライザーの提案に基づいて自動修正を適用します。 |
log | ビルドコマンドを実行し、実行されたコンパイルコマンドを収集し、JSONファイルに保存します。 |
parse | 分析の概要を印刷し、人間が読みやすい形式になります。 |
server | CodeChecker Webサーバーを起動して管理します。 |
store | 分析結果をデータベースに保存します。 |
version | 使用されているCodeCheckerパッケージのバージョンを印刷します。 |
web-version | 使用されているCodeCheckerサーバーパッケージのバージョンを印刷します。 |
CodeChecker cmd Subcommandには、実行中のCodeCheckerサーバーからデータ(製品、実行、結果、統計)を取得するために使用できる他の多くのサブコマンドもあります。完全なリストについては、次の表を参照するか、このサブコマンドのヘルプメッセージを確認してください( CodeChecker cmd --help ):
CodeChecker cmdサブコマンド | 説明 |
|---|---|
runs | 使用可能な分析の実行をリストします。 |
history | 複数の実行の実行履歴を表示します。 |
results | 特定の実行のリスト分析結果(検索)概要。 |
diff | 2つの分析の実行を比較し、違いを示します。 |
sum | チェッカーの統計を表示します。 |
token | CodeCheckerサーバーによって管理された個人的なアクセストークンの構成に関連するサブコマンドにアクセスします。 |
del | 分析の実行を削除します。 |
update | 分析の実行を更新します。 |
suppress | CodeCheckerサーバー上のレポートの抑制を管理およびインポートします。 |
products | CodeCheckerサーバーが管理する製品の構成に関連するサブコマンドにアクセスします。 |
components | CodeCheckerサーバーが管理するソースコンポーネントの構成に関連するサブコマンドにアクセスします。 |
login | 特権を必要とするCodeCheckerサーバーに認証します。 |
export | コメントをエクスポートし、CodeCheckerからのレビューステータス。 |
import | コメントをインポートし、ステータスをCodeCheckerにレビューします。 |

ステップ1 : CodeChecker log与えられたビルドコマンドを実行し、実行されたコンピレーション手順を記録します。これらの手順は、JSON形式の出力ファイル(コンパイルデータベース)に書き込まれます。
ステップ2 : CodeChecker analyze以前に作成したJSONコンピレーションデータベースを使用して、プロジェクトの分析を実行します。分析結果は、機械可読(プリスト)形式で出力します。
ステップ3 :このステップでは、複数のことを行うことができます。
分析結果ファイル( CodeChecker parse )の要約と結果を解析してプリントします。
結果を実行中のCodeCheckerサーバー( CodeChecker store )に保存します。
2つの分析結果/実行を比較して、2つの間で異なる結果を表示します( CodeChecker cmd diff )。
等
詳細については、CodeCheckerの使用方法ユーザーガイドを参照してください。
始めましょう(例でハウツー)
アナライザーユーザーガイド
誤検知を回避または抑制します
チェッカーと静的アナライザー構成
GCC非互換性
誤検知を抑制します
WebServerユーザーガイド
Web GUIユーザーガイド
コマンドラインとWeb UI機能の概要
セキュリティ構成
認証の構成
承認の構成
展開
Dockerを使用してサーバーを展開します
サーバー構成
サーバーロギングの構成
1つのサーバーで複数のCodeCheckerリポジトリを設定します
継続的統合(CI)
GitHubアクションとしてのCodeChecker
GerritとJenkinsでのセットアップ
データベース構成
postgreSQLデータベースバックエンドセットアップガイド
CodeCheckerサーバーとデータベーススキーマアップグレードガイド
CodeCheckerは、アナライザーの結果を視覚化するための一般的なツールとして使用できます。
次のツールがサポートされています。
| 言語 | アナライザ |
|---|---|
| C/C ++ | Clang Static Analyzer |
| Clang Tidy | |
| Clang Sanitizers | |
| cppcheck | |
| Facebookの推論 | |
| コッシネル | |
| スマッチ | |
| カーネルドック | |
| まばら | |
| cpplint | |
| C# | Roslynator.dotnet.cli |
| Java | SpotBugs |
| Facebookの推論 | |
| Python | ピリント |
| pyflakes | |
| JavaScript | eslint |
| タイプスクリプト | tslint |
| 行く | ゴリント |
| マークダウン | MarkDownlint |
| スフィンクス |
詳細については、サポートされているコードアナライザーのドキュメントとレポートコンバーターツールを参照してください。
CodeChecker以外でも使用できる便利なツール。
Build Logger(ビルドからJSONコンピレーションデータベースを生成するため)
Plist/SarifからHTMLコンバーター(指定されたPlistまたはSARIFファイルからHTMLファイルを生成するため)
レポートコンバーターツール(分析結果を他のアナライザーからCodeCheckerレポートディレクトリ形式に変換するため)))
翻訳ユニットコレクター(翻訳ユニットのソースファイルを収集するか、指定されたヘッダーファイルに依存するソースファイルを取得するため)
レポートハッシュジェネレーター(レポートの一意のハッシュ識別子を生成するため)
毎日の分析のためのヘルパースクリプト
pip経由でCodeCheckerをインストールしますCodeCheCheckerはPYPIで入手でき、次のコマンドでインストールできます。
PIP3インストールCodeChecker
注:このパッケージは、 pip3コマンドが利用可能なLinux 、 OSX 、およびWindows Systemsにインストールできます。 OSXでは、ロギング用にintercept-buildをインストールする必要があります( CodeChecker log )。 Windowsでは、ロギングは使用できません。
snapパッケージマネージャーを介してCodeCheckerをインストールしますCodeCheCheckerはスナップストアで入手でき、次のコマンドでインストールできます。
sudo snap install codechecker -classic
注:残念ながら、SNAPパッケージは低ケースのコマンド名のみをサポートしています。このため、どこでもCodeCheckerの代わりにcodecheckerコマンドを使用する必要があります。 CodeCheckerスナップパッケージで利用可能なコマンドの完全なリストについては、 snap info codechecker実行します。
詳細な依存関係リスト、および新しいClangおよびClang-Tidyバージョンをインストールする方法についての指示については、要件を参照してください。以下のコマンドは、Ubuntu 20.04 LTSでCodeCheckerをブートストラップするために使用されます。
#開発および分析環境の必須依存関係をインストールします。#注:ClangまたはClang-Tidyは十分に新鮮なバージョンであり、パッケージマネージャーから来る必要はありません!#cppcheckの場合、最小限のサポートバージョンはGCCの場合、最小限のサポートバージョンは13.0.0です。 Clang-Tidy Cppcheck G ++ビルドエッセンシャルカール
gcc-multilib git python3-dev python3-venv python3-setuptools#venv_devターゲットとubuntu 23 linuxの場合、追加のライブラリをインストールします:sudo apt-get install libpq-dev#intals nodejs依存関係をWebにインストールします。 Debian/Ubuntuの場合、次のコマンドを使用できます。詳細については、公式ドキュメントを参照してください:#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#codechecker source code.git clone https://github.com/ericsson/codechecker.gitをチェックしてください。 `venv`.make venvsource $ pwd/venv/bin/activate#[optional]外部認証方法(LDAP/PAM)を使用する場合(ldap/pam) path = "$ pwd/build/codechecker/bin:$ path" cd ..注:
デフォルトでは、 make package 、 32bitと64bitのLdlogger共有オブジェクトを構築します。 64 bit onlyビルドしてBUILD_LOGGER_64_BIT_ONLY=YES make package化する場合は、 BUILD_LOGGER_64_BIT_ONLY環境変数をYESに設定できます。
デフォルトでは、 make package 、まだ構築されていない場合、またはUIコードが変更されている場合にUIコードを構築します。 UIコードをビルドしたくない場合は、パッケージBuild: BUILD_UI_DIST=NO make packageの前に、 BUILD_UI_DIST環境変数をNOに設定できます。
CodeCheckerを実行する前に環境を手動でアクティブにする必要がないように、 make package代わりにmake standalone_package作成します。
システムのPythonを新しいバージョンにアップグレードした場合(たとえば、 3.8から3.11まで - これは、Ubuntuを20.04 LTSから22.04 LTSにアップグレードする場合です)、インストールされている環境はボックスで機能しません。この問題を修正するには、次のコマンドを実行してchecker_envもアップグレードします。
cd〜/codechecker/venv python3 -m venv。
Mac OS Xのインストール手順については、Mac OS Xインストールガイドのドキュメントを参照してください。
DockerでCodeCheckerサーバーを実行するには、Dockerドキュメントを参照してください。 Docker HubでCodeCheckerのWebサーバーコンテナを見つけることができます。
Visual Studio MarketplaceまたはOpen VSXからCodeChecker VSCODE拡張機能をインストールして使用できます。
主な機能:
編集者からCodeChecker分析を実行し、結果を自動的に確認します。
保存されたときに現在のファイルを再分析します。
ビルドシステムの一部としてCodeCheckerを実行するためのコマンドとビルドタスク。
見つかったレポートを閲覧し、コードに直接再生手順を表示します。
繁殖ステップ間をナビゲートします。

詳細については、このプラグインのインストールと使用方法については、この拡張機能のリポジトリを参照してください。

CodeCheckerは、プロジェクトの再利用可能なGitHubアクションを介して実行できます!分析をローカルで実行するかのように、ビルドコマンドのみを指定する必要があります。
詳細については、GitHub Actions MarketplaceのCodeChecker静的分析アクションをご覧ください。
これらの手順は、分析を実行する新しいコマンドプロンプトで常に取得する必要があります。
ソース〜/CodeChecker/venv/bin/Activate#codecheckerパッケージのパス#注:CodeCheckerのフルパスを常に指定する場合は、この行をスキップします。ExportPath=〜/CodeChecker/Build/CodeChecker/Bin:$パス#ビルドLLVM/Clang#パスのパス:インストールパスとしてのパスのパスをスキップします。 PATH>/build/bin:$ path
checkコマンドでプロジェクトを分析します。
CodeChecker check -b "cd ~/your-project && make clean && make" -o ./results
check 、アナライザーによってプロジェクトで見つかった問題の概要を印刷します。レポートは、 plist XML形式の./resultsディレクトリに保存されます。
実行することにより、結果を静的HTMLとして視覚化できます
CodeChecker parse -e html ./results -o ./reports_html
インデックスページは./reports_html/index.html index.htmlのすべてのレポーのリストで生成されます
何百もの結果がある場合は、データベースバックエンドを使用してWebサーバーにそれらを保存することをお勧めします。
別の端末またはバックグラウンドプロセスとしてCodeChecker Webとストレージサーバーを起動します。デフォルトでは、 localhost:8001で聴きます。
レポートを含むsqliteデータベースは、 -wフラグを介して提供できるワークスペースディレクトリ( ~/.codechecker )に配置されます。
CodeChecker server
分析レポートをサーバーに保存して、Webビューアーを使用できるようにします。
CodeChecker store ./results -n my-project
ブラウザでCodeCheckerのWebビューアーを開くと、分析の結果を示すWebアプリケーションに迎えられる必要があります。
建築
パッケージレイアウト
依存関係
Thrift Interface
パッケージと統合テスト
CodeCheckerインフラストラクチャに関する概要は、PLDI 2020で提供されました。
マルトン、ガーバーとクルップ、ダニエル:
ツールトーク:CodeChecker
インフラストラクチャに関する高レベルの概要は、2015年のユーロLLVM会議プレゼンテーションの中で入手できます。
クルップ、ダニエルとオーバン、ギョルギーとホルヴァース、ガーバーとババティ、ベンス:
Clang Static Analysis Toolsetの産業経験