依存関係アナライザーの範囲と制限
解析範囲
依存関係アナライザーは、プロジェクトまたはモデルに必要なファイルとアドオンを特定します。解析は、モデル参照、サブシステム参照、リンクされたライブラリ、MATLAB® および C/C++
コード、Stateflow® チャート、データ ファイル、S-Function、要件ドキュメントといった、幅広い依存関係をカバーします。
依存関係アナライザーは、モデルまたはブロックのコールバック、.m
ファイルの S-Function などに MATLAB コードを検出すると、参照するファイルを識別しようとします。詳細については、解析の制限を参照してください。
MATLAB ルート フォルダー配下にあるファイルについては、依存関係アナライザーには必要な製品のみが表示されます。依存関係の解析は行いません。
依存関係アナライザーは、ユーザー定義のアドオン内の依存関係を特定するほか、コード生成によって、またはモデル パラメーター内の MATLAB コードによって導入された依存関係を特定します。これらのオプションは、大規模な設計では時間がかかることがあるため、既定でオフになっています。
解析の範囲を指定するには、依存関係アナライザー ツールストリップで、[解析] をクリックし、以下のオプションを 1 つ以上選択します。
オプション | 既定の設定 | 説明 |
---|---|---|
C/C++ コード | オン | C/C++ コード ファイルによって導入された依存関係を解析します。 |
アドオン | オフ | アドオン内の依存関係を解析します。 |
モデル パラメーター | オフ | モデル ブロック パラメーターの MATLAB コードによって導入された依存関係を解析します。 |
生成されたコードのトレーサビリティ | オフ | モデルから生成されたコードによって導入された依存関係を解析します。 |
解析の制限
依存関係アナライザーには、MATLAB コード解析に固有の次のような制限があります。
依存関係アナライザーは、関数の入力引数を、それがリテラル文字ベクトルまたは string であるときにのみ特定します。
load("mydatafile") load mydatafile
ファイル名を変数として定義して関数に渡した場合、依存関係アナライザーはその依存関係を特定できません。次の例では、コードが実行されないため、依存関係アナライザーは
str
の値を持っていません。依存関係アナライザーは、依存関係が見つからないと報告する場合があります。この制限は、str = "mydatafile"; load(str);
load
に似た関数、たとえば、fopen
、xlsread
、importdata
、dlmread
、eval
、またはimread
などにも適用されます。依存関係アナライザーは、常に自動的にタイプを判別するとは限りません。オブジェクト メソッドの呼び出し方法によっては、依存関係アナライザーがメソッドと関数を混同し、依存関係が見つからないと報告する場合があります。
MATLAB では、オブジェクト メソッドを 2 つの異なる方法で呼び出すことができます。たとえば、オブジェクト
p
についてメソッドaddFile
を呼び出す場合、次のように関数表記を使用できます。また、次のようにドット表記を使用することもできます。p = currentProject; addFile(p,"myfile");
p = currentProject; p.addFile("myfile");
p
のタイプを明示的に宣言しない場合、依存関係アナライザーは、関数表記を使用したメソッドの呼び出しを、関数呼び出しと混同することがあります。アナライザーはaddFile
を依存関係がないものとして報告します。この制限を回避するには、メソッドの呼び出しにドット表記を使用するか、関数内で arguments を使用して変数のタイプを明示的に宣言します。
function myfunction(p) arguments p matlab.project.Project end addFile(p,"myfile"); end
依存関係アナライザーでは、メソッドの呼び出しを使用して参照されるクラスへの依存関係は報告されません。
ファイルを解析する際、それが呼び出されるコンテキストは依存関係アナライザーで考慮されません。ファイル
A
でファイルB
を呼び出し、B
で使用されているデータをA
で定義している場合、そのデータは依存関係アナライザーで認識されません。依存関係アナライザーでは、このデータを不足しているファイルとして報告します。この制限を回避するには、このデータを関数の入力引数を使用して明示的に渡します。たとえば、モデルで参照されている Simulink® サブシステムの解析時、そのサブシステムがデータ ディクショナリにリンクし、データ ディクショナリで定義されている列挙を使用している場合、解析で列挙にアクセスできず、このデータが不足しているファイルとして報告されます。
依存関係アナライザーでは、モデルが要求した特定のブロックセットをレポートしない可能性があります。
依存関係アナライザーは、Fixed-Point Designer™ など、どのファイルにも依存関係を導入しないブロックセットを検出できません。
解析で検出できない依存関係を含めるには、プロジェクトに依存関係を導入するファイルを追加します。モデルからプロジェクトを作成するには、モデルからのプロジェクトの作成を参照してください。
依存関係アナライザーは必須サポート パッケージを検出しない可能性があります。アプリやツールボックスなど、必須アドオンをリストします。
依存関係アナライザーは、マスクされたブロック内の動的なコンテンツをレポートしない可能性があります。
マスクされたブロックのパラメーターに基づき、動的なマスクによってマスク サブシステムが変更され、ブロックの依存関係が変化することがあります。このような動的なマスクがライブラリ内にある場合、依存関係アナライザーは動的な変更を検出することができません。
依存関係アナライザーは、MATLAB 関数ブロックから呼び出される Simulink 関数をサポートしません。
一部の MathWorks® 製品やアドオンでは、コードおよび Simulink ライブラリを共有しています。依存関係アナライザーは、それらすべてにおける依存関係をレポートすることがあります。
共有コードが使用されている場所を調べるには、[プロパティ] パネルの [製品] セクションで、[次の間での共有機能:] の下にある製品をポイントして、検索フォルダー アイコン をクリックします。
依存関係アナライザーは、その内容を評価せずにプロジェクト コードを解析するため、次のようになります。
依存関係アナライザーは、実行された関数にグローバル変数を追加しません。
依存関係アナライザーは、実行されない場合でも論理ステートメント内のコードを解析します。次の例では、コードは実行されませんが、依存関係アナライザーは Simulink で見つからない依存関係をレポートします。
if false load_system(vdp) end