Qodana 2024.1 ヘルプ

C/C++ 用 Qodana

C/C++ 用の Qodana を使用すると、コンパイルデータベース(英語)を含む C および C++ プロジェクトを分析できます。このリンターは Clang-Tidy(英語) リンターに基づいており、AMD64 および ARM64 アーキテクチャで動作します。

C/C++ 用の Qodana は、CLion によって提供される Clang-Tidy および MISRA checks インスペクションを供給することにより、既存の Clang-Tidy インスペクションを拡張します。

C/C++ 用の Qodana は、Community、Ultimate、Ultimate Plus ライセンスで利用できます。ただし、CLion の Clang-Tidy および MISRA checks インスペクションは、Ultimate および Ultimate Plus ライセンスでのみ利用できます。

サポートされている機能

Qodana for C/C++ リンターは、次の Qodana 機能を提供します。

フィーチャー

ライセンスに基づいて利用可能

ベースライン

コミュニティ、Ultimate、Ultimate プラス

クオリティゲート

コミュニティ、Ultimate、Ultimate プラス

使い方

C/C++ 用の Qodana の Docker イメージは、Clang、16.0.0、LLVM 16 を採用しています。リンターによって採用されているすべてのソフトウェアの詳細な説明については、 Dockerfile (英語) を参照してください。

リンターは、プロジェクトディレクトリの build/compile_commands.json ファイルに含まれる compilation database ファイルを検索し、このファイルを読み取り、プロジェクトを分析し、分析レポートを生成し、ローカルに保存するか、Qodana クラウドにアップロードします。

プロジェクトを準備する

  1. Clang-Tidy がシステムに導入されていることを確認してください。必要に応じて、LLVM Web サイト(英語)を使用してインストールしてください。

  2. qodana.yaml ファイルを開き、include および exclude 構成オプションを使用してインスペクションのリストを構成します。または、.clang-tidy ファイルでインスペクションを構成することもできます。GitHub(英語) Web サイトの構成例を参照してください。構成後、このファイルをプロジェクトルートに保存します。

  3. .clang-tidy ファイルを開き、C/C++ の Qodana によって分析されるファイルとパスのリストを構成します。

  4. CLion ドキュメントポータルの説明に従って compile_commands.json ファイルを生成し、プロジェクトルートの build ディレクトリに保存します。

    CMake を使用する場合は、qodana.yaml ファイルで次の bootstrap オプションを指定して compilation database を生成することもできます。例:

    bootstrap: mkdir -p build; cd build;cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. || true
  5. プロジェクトで、 Dockerfile (英語) にこれまで記載されていない特定のパッケージが必要な場合は、次の bootstrap コマンドを qodana.yaml ファイルに追加して、必要なパッケージをインストールします。

    bootstrap: sudo apt-get update; sudo apt-get install -y <list of required packages> |   rm -rf build; mkdir -p build; cd build;cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. || true

C/C++ のために Qodana を実行する

次の Docker コマンドを実行します。

docker run \ -v $(pwd):/data/project/ \ -v $(pwd)/results/:/data/results/ \ -e QODANA_TOKEN="<cloud-project-token>" \ jetbrains/qodana-clang:2024.1-eap

リンターは build/compile_commands.json ファイルを読み取り、Clang-Tidy ツールを実行します。

このコマンドでは、QODANA_TOKEN 変数は、インスペクションの結果を Qodana Cloud にアップロードできるプロジェクトトークンを参照します。QODANA_TOKEN 変数を省略すると、インスペクションの結果は、プロジェクトルートの /results ディレクトリに保存されている qodana.sarif.json で利用できるようになります。

コンパイルコマンドデータベースの場所をオーバーライドするには、プロジェクトルートを基準として compile_commands.json ファイルの場所を指定します。Docker コマンドは次のようになります。

docker run \ -v $(pwd):/data/project/ \ -v $(pwd)/results/:/data/results/ \ -e QODANA_TOKEN="<cloud-project-token>" \ jetbrains/qodana-clang:2024.1-eap \ --compile-commands <path-to-compile_commands.json>

関連ページ:

C/C++ インスペクションのリスト

データフロー分析:定数条件メソッド制御とデータフローを分析して、常に true または false である条件と静的に定数値を持つ式を報告します。警告定数関数の結果戻り値が常に同じ定数に等しい関数を検出します。警告定数パラメーターパラメーターが常に同じ定数に等しい関数を検出します。警告ぶら下がりポインタ無効なデータを指すポインターを検出します。一般的なケースは、double-free および use-after-free の問題です。制限のリストについては、この親チケットを確認してください。警告無限...

ベースライン

ベースラインは、特定の Qodana 実行時に取得され、ファイルに含まれているコードベースの問題のスナップショットです。ベースライン機能を使用すると、現在のコードとベースラインの状態を比較し、新しい問題、変更されていない問題、解決された問題を確認できます。この機能は、Community、Ultimate、Ultimate Plus ライセンスとその試用版で利用可能なすべてのリンターでサポートされています。使い方:ベースラインなしで Qodana を実行すると、現在の実行時に検出された問題を確認...

クオリティゲート

高品質のゲートは、コードの品質を制御し、期待される品質を満たすソフトウェアを構築できるようにする手法です。品質ゲート条件が失敗すると、Qodana は終了コード 255 を使用して終了し、CI/CD ワークフローまたはパイプラインが失敗します。例: プロジェクトの品質ゲートが 10 個の問題に設定され、コードカバレッジが 40% に設定されている場合、Qodana が 11 個目の問題またはコードカバレッジが 40% のしきい値を下回っていることが検出されると、ビルドワークフローは失敗します。品...

Compilation database

CMake、Gradle、Makefile に基づいていないプロジェクトで作業している場合でも、CLion が提供する高度な IDE 機能を利用できます。1 つの方法は、非 CMake プロジェクトをインポートし、CLion にそれを単純な CMake 構造に変換させることです。別のオプションは、compilation database をロードしてプロジェクトを開くことです。compilation database を使用すると、CLion はプロジェクトファイルを検出し、インクルードパスやコンパ...