|
[関数相互参照] レポート一連の [関数相互参照] レポートは、コード内の関数呼び出し階層における特有の側面を解析し、プロジェクト全体に対する結果をまとめます。関数間のデータフローを追跡する [関数フローチェック] とは異なり、[関数相互参照] レポートは、関数間および関数ポインタを介し直接実行された呼び出しのみを調査対象とします。
[ポインタによる呼出し] レポートベクタテーブルの作成やコールバック関数のサポートを目的に関数ポインタを使用することは、それらを有用にする一方で、設計もしくはコーディングで発生するミスが、のちに悪影響を及ぼす副作用を生み出すことがあります。あらゆる関数ポインタの使用および、このポインタを介して実行される可能性がある呼び出しをリスト化することで、[ポインタによる呼出し] レポートは、ソフトウェアの本体で使用される関数ポインタを体系的に確認する、有用な参照情報を提供します。次のスクリプトを例として取りあげます。
出力されたレポートには、関数ポインタを介して呼び出しを実行する関数がすべて表示されます。可能な場合には、呼び出し用の潜在的なターゲット関数のリストも併せて示されます。関数ポインタの解決における制約のため、潜在的なターゲットのリストには呼び出されない関数が含まれることや、逆に呼び出された関数が含まれないことがあります。Imagix 4D の関数ポインタの解決に関する詳細は、ユーザガイドの [C/C++コードの解析] のページに記載されています。
[再帰関数] レポート[再帰関数] レポートでは、直接的あるいは他の関数への呼び出しを介して間接的な形で、再帰的に自分自身を呼び出す関数をすべて検出します。再帰関数を使用することで実装が簡単になりますが、無限ループが発生しないように注意し、再帰終了条件が適切であることを確認する必要があります。組込みソフトウェアについては、スタックのオーバーランの危険性があるため、再帰関数は特に注意して使用することが重要です。レポート結果をレビューし再帰処理の最大数を試算したりテストしたりすることで、十分なスタックスペースを確保することができます。次にソースコードの例を示します。
[未使用コード] レポート[未使用コード] レポートには、プロジェクト内のすべてのルート関数がリストされています。これらはコード内の他の関数から呼び出されない関数で、定義したタスクのエントリ関数でもなく、デッドコード領域へのエントリポイントの候補となる関数です。補完的なレポートとして、到達不能な文があります。これは、関数内部のプログラムロジックのために到達不能な特定の文を識別します。リスト内のルート関数の一部は、実行可能ファイル自体へのエントリポイントである可能性があります。その他の関数は、静的に不定な関数ポインタを介して呼び出されるかもしれません(詳細は解析の問題を参照してください)。そのため、ある程度の手動でのレビューが必要ですが、レポートは可能なデッドコードエントリポイントの完全なリストを示します。 [未使用コード] レポートは、各ルート関数から到達可能な未使用コードの範囲を示します。合計関数数と合計行数の値には、ルート関数自体と、それが一意に呼び出す関数の両方が含まれます。これらは、単一のルート関数からのみ呼び出され、他の関数からは呼び出されない追加の関数です。この範囲はレポート内のリンクを介してグラフィカルにも表示されます。
[変数の使用] レポートImagix 4D は搭載されているさまざまなツールを活用することにより、ソフトウェアに存在する個々の関数や変数の相互作用に対して詳細な解析を行う、豊富な機能を提供します。その一方で [変数の使用] レポートでは、あらゆる変数の使用に関する概要を出力します。このレポートは、コードのあらゆる非ライブラリ関数をともなう、グローバル変数、静的変数、メンバ変数をリスト化し、関数が変数を設定したり読み取ったりする各インスタンスを示します。以下のレポートは、前述の「ポインタによる呼出し」のセクションに記載のソースコード例を使用して生成されたものです。オプションを使用することで、横軸と縦軸を入れ替えることができます。
|