Main Content

コード生成レポートの情報へのプログラムによるアクセス

コード生成に関する情報をベース MATLAB® ワークスペース内の変数にエクスポートすることができます。その変数に含まれる coder.ReportInfo オブジェクトのプロパティに、以下の情報が格納されます。

  • コード生成の成功、日時、出力ファイルのパス、プロセッサ、MATLAB Coder™ のバージョン、コード生成時にチェックアウトされたツールボックス ライセンス、ツールチェーン、ビルド構成などを含むコード生成の概要

  • コード生成構成オブジェクト

  • 入力ファイルのテキスト、パス、拡張子

  • 生成ファイルのテキスト、パス、拡張子

  • コード生成に関わるすべての MATLAB 関数およびメソッドについて: 名前、特殊化、ファイル、開始インデックス、終了インデックス

  • コード生成エラー、警告、情報メッセージ

  • 生成コードに関する潜在的な問題を示すコード洞察

  • コード生成時に生成されたビルド ログ

coder.ReportInfo のプロパティ を参照してください。

レポート情報オブジェクトを使用すると、このコード生成に関する情報にプログラムからアクセスできます。たとえば、MATLAB コマンド ラインでコード生成メッセージを表示できます。この操作を実行するには、ビルド スクリプトでそれらのメッセージを含むプロパティにアクセスします。

レポート情報オブジェクトの作成

ベース MATLAB ワークスペース内の変数 info にコード生成レポート情報をエクスポートするとします。次のいずれかを行います。

  • MATLAB Coder アプリの [デバッグ] タブで、変数名 info[レポート情報を変数にエクスポート] を設定します。

  • コマンド ラインで codegen コマンドを -reportinfo オプション付きで使用します。-reportinfo オプションの後に変数名を指定します。

    codegen myFunction -reportinfo info
  • コマンド ラインで、コード構成オブジェクトのプロパティ ReportInfoVarName'info' に設定します。

  • コード生成レポートを生成し、開きます。[レポート情報のエクスポート] をクリックします。このダイアログ ボックスで、変数名 info を指定します。

例: 成功するコード生成に対するレポート情報オブジェクトの作成

成功するコード生成プロセスについて、レポート情報オブジェクトを作成します。そのオブジェクトのプロパティを検査します。

  1. MATLAB 関数 foo を定義します。

    function b = foo(a)
    c = svd(a,0);
    b = sum(c);
    end

    foo の MEX 関数を生成します。入力 a を、1 番目の次元の上限が 3 で 2 番目の次元の上限が 5 の可変サイズの行列として指定します。コード生成レポートの情報をベースの MATLAB ワークスペースの変数 info にエクスポートします。

    codegen -config:mex foo -args {coder.typeof(ones(1,1),[3 5],[1 1])} -reportinfo info

    コード ジェネレーターが MEX 関数 foo_mex を生成します。また、コード ジェネレーターはベース MATLAB ワークスペース内にレポート情報オブジェクト info も作成します。

  2. レポート情報オブジェクトの構造を検査します。このオブジェクトには、コード生成に関する情報を含むプロパティが 8 つあります。

      ReportInfo with properties:
    
               Summary: [1×1 coder.Summary]
                Config: [1×1 coder.MexCodeConfig]
            InputFiles: [1×1 coder.CodeFile]
        GeneratedFiles: [21×1 coder.CodeFile]
             Functions: [1×1 coder.Function]
              Messages: [0×1 coder.Message]
          CodeInsights: [1×1 coder.Message]
             BuildLogs: [1×1 coder.BuildLog]
  3. info の各プロパティを個別に検査します。

    • info.Summary は、coder.Summary オブジェクトで、そのプロパティにコード生成の成功、コード生成日時、出力ファイルのパス、プロセッサ、コード生成時にチェックアウトされたツールボックス ライセンス、MATLAB Coder のバージョンに関する情報が含まれます。

        Summary with properties:
      
                  Success: true
                     Date: '08-May-2020 09:15:07'
               OutputFile: 'C:\coder\R2020b\License discovery\foo_mex.mexw64'
                Processor: 'Generic->MATLAB Host Computer'
                  Version: 'MATLAB Coder 5.1 (R2020b)'
          ToolboxLicenses: [1×0 string]

      スタンドアロン コードを生成した場合、info.Summary にはツールチェーンとビルド構成についての情報も含まれます。

    • info.Config はコード構成オブジェクトです。この例では、foo の MEX 関数を生成したため、これは coder.MexCodeConfig オブジェクトになります。

    • info.InputFilescoder.CodeFile オブジェクトの配列です。配列の各要素に、コード生成入力ファイルのテキスト、パス、および拡張子が格納されます。この例では、入力ファイルは foo.m の 1 つだけなので、配列の要素は 1 つだけです。

        CodeFile with properties:
      
               Text: 'function b = foo(a)←↵b = svd(a,0);←↵end←↵'
               Path: 'C:\coder\R2019a\Report Info Object\foo.m'
          Extension: '.m'

    • info.GeneratedFilescoder.CodeFile オブジェクトの配列です。配列の各要素に、生成ファイルのテキスト、パス、および拡張子が格納されます。この例では、生成ファイルは 25 個あるため、211 列の配列になります。

        21×1 CodeFile array with properties:
      
          Text
          Path
          Extension

    • info.Functionscoder.Function オブジェクトの配列です。配列の各要素に、MATLAB 関数またはメソッドに関する次の情報が格納されます。

      • 名前および特殊化。

      • 関数またはメソッドを含む入力ファイルの coder.CodeFile オブジェクト。このオブジェクトは info.InputFiles にも含まれます。

      • ファイルのテキストに含まれる関数またはメソッドの開始インデックスおよび終了インデックス。

      この例では、入力ファイル foo.m 内の MATLAB 関数は 1 つだけのため、info.Functions の要素は 1 つです。

        Function with properties:
      
                    Name: 'foo'
          Specialization: 0
                    File: [1×1 coder.CodeFile]
              StartIndex: 1
                EndIndex: 52
      

    • info.Messagescoder.Message オブジェクトの配列で、コード生成エラー、警告、および情報メッセージを格納します。この例では、該当するメッセージはありません。そのため、このプロパティは空の配列です。

        0×1 Message array with properties:
      
          Identifier
          Type
          Text
          File
          StartIndex
          EndIndex
    • info.CodeInsightscoder.Message オブジェクトの配列で、コード生成エラー、警告、および情報メッセージを格納します。これらの洞察は、生成されるコードに含まれる潜在的な問題についてのメッセージです。たとえば、MATLAB コードとの差異や、起こりうる行優先の配列レイアウトの問題などです。これらのメッセージは、コード生成レポートの [コード洞察] タブにも表示されます。配列の各要素に、1 つのコード洞察に関する次の情報が格納されます。

      • メッセージの識別子とタイプ。

      • メッセージのテキスト。

      • メッセージが属するカテゴリおよびサブカテゴリ。

      • メッセージを生成した入力ファイルの coder.File または coder.CodeFile オブジェクト。

      • メッセージを生成したファイル テキストの部分の開始インデックスと終了インデックス。

      この例では、コード洞察が 1 つあります。

        Message with properties:
      
          Identifier: 'Coder:potentialDifferences:autoDimIncompatibility'
                Type: 'Info'
                Text: 'In the generated code, the dimension to operate along is selected automatically, and might be different from MATLAB. Consider specifying the working dimension explicitly as a constant value.'
            Category: 'PotentialDifferencesFromMATLAB'
                File: [1×1 coder.CodeFile]
          StartIndex: 41
            EndIndex: 46

      ファイルのテキストにインデックスを付けるには、StartIndex プロパティおよび EndIndex プロパティを使用します。

      info.CodeInsights.File.Text(41:46)
      このコマンドは、コード洞察を生成したファイル テキストの部分を示しています。
      'sum(c)'

    • info.BuildLogs は、コード生成中に作成されたビルド ログを含む coder.BuildLog オブジェクトの配列です。ビルド ログには、コンパイルおよびリンクのエラーと警告が含まれます。同一のビルド ログは、コード生成レポートの [ビルド ログ] タブにも表示されます。配列の各要素に、1 つのビルド ログのタイプとテキストが含まれます。この例では、タイプが 'Target' のビルド ログが 1 つあります。

例: ツールボックス ライセンスをチェックアウトする、成功するコード生成に対するレポート情報オブジェクトの作成

ツールボックス ライセンスをチェックアウトするコード生成プロセス用のレポート情報オブジェクトを作成します。そのオブジェクトのプロパティを検査します。

  1. 関数 iqr (Statistics and Machine Learning Toolbox) および haart (Wavelet Toolbox) を呼び出す MATLAB 関数 bar を定義します。

    function [u,v,w] = bar(x) %#codegen
    u = iqr(x);
    [v,w] = haart(x); 
    end

    bar の C ソース コードを生成します。入力引数の型を double の 1100 列の行ベクトルとして指定します。コード生成レポートの情報をベースの MATLAB ワークスペースの変数 info にエクスポートします。

    codegen -c bar -args {zeros(1,100)} -reportinfo info
    
  2. コード生成に成功します。info.Summary.ToolboxLicenses プロパティを検査します。

      1×2 string array
    
        "statistics_toolbox"    "wavelet_toolbox"
    

    このプロパティは、Statistics and Machine Learning Toolbox™ と Wavelet Toolbox™ のライセンスがコード生成時にチェックアウトされたことを示しています。

    メモ

    MEX コードを生成する場合、これらのライセンスは MEX 関数の読み込み時に再度チェックアウトされます。

    スタティック ライブラリまたはダイナミック リンク ライブラリを生成する場合、ツールボックス ライセンスはコード生成時にのみチェックアウトされます。コード ジェネレーターは、生成されたスタンドアロン コードにライセンスのチェックアウトを書き込みません。

例: 失敗するコード生成に対するレポート情報オブジェクトの作成

失敗するコード生成プロセス用のレポート情報オブジェクトを作成します。そのオブジェクトのプロパティを検査します。

  1. MATLAB 関数 foo を定義します。

    function b = foo(a)
    b = svd(a,0);
    end
    

    foo の MEX 関数を生成します。入力 a を string スカラーとして指定します。コード生成レポートの情報をベースの MATLAB ワークスペースの変数 info にエクスポートします。

    codegen -config:mex foo -args {"A string scalar"} -reportinfo info

    string スカラーは MATLAB 関数 svd の有効な入力でないため、コード生成は失敗します。コード ジェネレーターは、ベース MATLAB ワークスペース内にレポート情報オブジェクト info を作成します。

  2. info.Summary プロパティおよび info.Messages プロパティを検査します。

    • info.Summary はコード生成が失敗したことを示しています。

        Summary with properties:
      
                  Success: false
                     Date: '08-May-2020 10:20:35'
               OutputFile: 'C:\coder\R2020b\License discovery\codegen\mex\foo'
                Processor: 'Generic->MATLAB Host Computer'
                  Version: 'MATLAB Coder 5.1 (R2020b)'
          ToolboxLicenses: [1×0 string]
    • info.Messagescoder.Message オブジェクトの配列で、コード生成エラー、警告、および情報メッセージを格納します。配列の各要素に、1 つのメッセージに関する次の情報が格納されます。

      • メッセージの識別子とタイプ。

      • メッセージのテキスト。

      • メッセージの原因となった入力ファイルの coder.CodeFile オブジェクト

      • メッセージの原因となったファイル テキストの部分の開始インデックスと終了インデックス

      この例では、エラー メッセージは 2 つあります。そのため、info.Messages21 列の配列です。

        2×1 Message array with properties:
      
          Identifier
          Type
          Text
          File
          StartIndex
          EndIndex

      配列 info.Messages(1) の最初の要素を表示します。

        Message with properties:
      
          Identifier: 'Coder:toolbox:unsupportedClass'
                Type: 'Error'
                Text: 'Function 'svd' is not defined for values of class 'string'.'
                File: [1×1 coder.CodeFile]
          StartIndex: 26
            EndIndex: 33
      StartIndex プロパティおよび EndIndex プロパティを使用して、ファイルのテキストにインデックスを付けます。
      info.Messages(1).File.Text(26:33)
      このコマンドは、エラー メッセージの原因となったファイル テキストの部分を表示します。
      'svd(a,0)'

手動でのコード検査

入力ファイルのテキストを手動で検査するには、StartIndex および EndIndex の値に対応する行番号と列番号が役立ちます。この情報を取得するには、関数 getLineColumn を使用します。この関数は、StartIndex に対応する行番号および列番号と、EndIndex に対応する行番号および列番号を格納した、2 つの構造体を返します。

前述の例で、最初のエラー メッセージの原因となった foo.m の部分を手動で検査するため、ファイルのテキストを表示します。

info.Messages(1).File.Text

ファイルのテキストが次のように表示されます。

'function b = foo(a)
 b = svd(a,0);
 end
 '

最初のエラー メッセージの原因となったテキスト部分の行番号と列番号にアクセスします。

[startLoc,endLoc] = getLineColumn(info.messages(1))

出力は、次のようになります。

startLoc = 

  struct with fields:

      Line: 2
    Column: 5


endLoc = 

  struct with fields:

      Line: 2
    Column: 12

これらの位置は、foo.m のテキスト内の関数呼び出し 'svd(a,0)' の最初と最後の位置に対応します。

コード構成オブジェクトの新しい MATLAB セッションへの転送

MATLAB セッションで作成したレポート情報オブジェクト info を別の MATLAB セッションで使用すると仮定します。info.Config がスタンドアロン コード生成用の構成オブジェクトの場合 (coder.CodeConfig または coder.EmbeddedCodeConfig)、次の動作が起こることがあります。

  • 2 つ目のセッションの MATLAB ホスト コンピューターに、info.Config.Hardware プロパティで指定されたハードウェア ボードがインストールされていない場合、構成パラメーター info.Config.Hardware が既定値に戻ります。既定値は [] です。

  • 2 つ目のセッションの MATLAB ホスト コンピューターに、info.Config.Toolchain プロパティで指定されたツールチェーンがインストールされていない場合、構成パラメーター info.Config.Toolchain が既定値に戻ります。既定値は 'Automatically locate an installed toolchain' です。

参考

| | | | | | | |

関連するトピック