C-STAT内部データベースのフォーマットについて
テクニカル・ノート 210218
アーキテクチャ:
All
コンポーネント:
general
更新日:
2021/06/22 3:36
はじめに
C-STATでは、永続データを SQLite3
データベースに格納しています。このデータベースには、 icstat.exe
の実行や、IAR Embedded Workbenchによる前回の解析メッセージの抽出などは行わずに、直接クエリを送ることができます。
このテクニカルノートでは、データベースからメッセージや抑制情報を直接入手したい場合に有用ないくつかのデータベーステーブルについて説明します。
免責事項
- ここでの説明はC-STAT バージョン 2.1.0 に対するものです。
- フォーマットはC-STAT の今後のバージョンで変更されることがあります。
解説
C-STAT 内部では、メッセージのことをwarnings、チェックのことをpropertiesと呼んでいます。特に言及しない限り、フィールド型はすべて string
です。
warnings テーブル
通常のメッセージを表すテーブルは以下のようになっています。
カラム | 意味 |
warning_id (integer) |
メッセージの固有番号。メッセージの検出毎にインクリメントされます。 |
warning_hash |
メッセージの固有ハッシュ |
property_id |
チェックの内部ID |
property_alias |
チェック名。同一チェックが複数ある場合はカンマで区切ります。 |
file_name |
メッセージが検出されたファイルの絶対パス |
src_name |
メッセージが検出された時の解析ソースファイルの絶対パス |
fn_hash |
メッセージが検出された関数(またはグローバルスコープ)の固有ハッシュ |
line_id |
抽象構文木(AST)のノードにメッセージをマッピングするための内部情報 |
implied_id |
ASTのノードにメッセージをマッピングするための内部情報 |
line_num |
メッセージの行番号 |
iar_seq |
メッセージの連続行番号。基本的に、すべてのインクルードが1つのファイルに追加された場合にメッセージが持つ行番号。メッセージの抑制に使用されます。 |
msg |
メッセージの情報出力 |
encoded_trace |
トレース情報(ある場合) |
full_trace |
不使用 |
severity |
メッセージの重要度 - 低・中・高 |
column_num |
メッセージのカラム番号 |
link_warnings テーブル
link_warningsテーブルには、リンク warningsを表すテーブルが格納されています。カラムはwarnings テーブルと同じです。
注意:link_warnings テーブル内の情報は、各リンク解析の実行後に削除され、再配置されます。これによりメッセージの順番を変えることができます。
warnings_meta テーブル
warnings_meta テーブルは、抑制されたメッセージの情報を保持します。
カラム | 意味 |
warning_hash |
メッセージのハッシュ。warningsまたはlink_warningsテーブル内のハッシュと一致します。 |
meta_key |
常に status |
meta_value |
常に 1 |
suppression_directives テーブル
このテーブルは、抑制コメントとプラグマディレクティブの両方、あるいはどちらか一方が指定されているプロジェクト内のすべての場所の情報を保持します。
カラム | 意味 |
suppress_id (integer) |
ディレクティブの固有ID。ディレクティブの検出毎にインクリメントされます。 |
property_id |
ディレクティブで使用されるチェック名 |
iar_seq_start |
ディレクティブの連続行番号の開始番号。warningsとlink_warningsテーブル内の |
iar_seq_end |
ディレクティブの連続行番号の終了番号。warningsと link_warningsテーブル内の iar_seq 番号と相関します。 |
col_start |
不使用。常にゼロ |
col_end |
不使用。常にゼロ |
line |
ディレクティブが配置されたファイルの行番号 |
file |
ディレクティブが配置されたファイル |
src |
ディレクティブが見つかった時の解析ソースファイル |
ヘッダファイルにディレクティブが置かれている場合、そのヘッダファイルが含まれているソースファイル毎に、テーブル内でエントリが2回以上起こることがあります。
まとめ
C-STATの メッセージ と 抑制情報 は、C-STATの内部データベースから直接入手できます。