主要内容

以编程方式访问代码生成报告信息

您可以将有关代码生成的信息导出到基础MATLAB中的一个变量中®工作区。该变量包含编码器。ReportInfo对象,其属性包含以下信息:

  • 代码生成摘要,包括关于代码生成成功、日期和时间、输出文件的路径、处理程序、版本的信息MATLAB编码器™,在代码生成、工具链和构建配置期间检出的工具箱许可证。

  • 代码生成配置对象。

  • 输入文件的文本、路径和扩展名。

  • 生成文件的文本、路径和扩展名。

  • 对于代码生成中涉及的所有MATLAB函数和方法:名称、专门化、文件、开始索引和结束索引。

  • 代码生成错误、警告和信息消息。

  • 代码洞察,指出生成的代码的潜在问题。

  • 在代码生成期间生成的构建日志。

看到编码器。ReportInfo属性

您可以使用报告信息对象以编程方式访问有关代码生成的信息。例如,您可以在MATLAB命令行中显示代码生成消息。要执行此操作,请在构建脚本中访问包含这些消息的属性。

创建报表信息对象

假设您希望将代码生成报告信息导出到变量信息在你的基本MATLAB工作空间。做以下其中之一:

  • MATLAB编码器应用程序,调试选项卡,设置导出报告信息到变量转换为变量名信息

  • 在命令行中,使用codegen命令-reportinfo选择。的后面指定变量名-reportinfo选择。

    codegenmyFunction-reportinfo信息
  • 在命令行中,设置代码配置对象属性ReportInfoVarName到字符向量“信息”

  • 生成并打开代码生成报告。点击出口报告信息.在对话框中,指定变量名信息

示例:为成功的代码生成创建报告信息对象

为成功的代码生成过程创建报告信息对象。检查这个对象的属性。

  1. 定义MATLAB函数喷火

    函数B = foo(a) c = svd(a,0);b =和(c);结束

    为生成一个MEX函数喷火.指定的输入一个作为一个变尺寸矩阵,其第一个维数的上界为3.第二个维度的上界是5.将代码生成报告信息导出到变量信息在你的基本MATLAB工作空间。

    codegen配置:墨西哥人喷火arg游戏{coder.typeof(的(1,1),[3 - 5],[1])}-reportinfo信息

    代码生成器生成MEX函数foo_mex.代码生成器还创建报告信息对象信息在MATLAB的基本工作空间。

  2. 检查报表信息对象的结构。该对象有八个属性,它们包含有关代码生成的信息。

    带有属性的ReportInfo:摘要:[1×1编码器。配置:[1×1编码器。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. 检查信息分开。

    • 信息。总结是一个编码器。总结对象的属性包含有关代码生成成功、代码生成日期和时间、输出文件的路径、处理程序、在代码生成期间签出的工具箱许可以及版本的信息MATLAB编码器

      Date: '08-May-2020 09:15:07' OutputFile: 'C:\编码器\R2020b\许可证发现\foo_mex。mexw64' Processor: 'Generic->MATLAB Host Computer' Version: 'MATLAB Coder 5.1 (R2020b)' ToolboxLicenses: [1×0 string]

      如果您生成独立的代码,信息。总结还包含关于工具链和构建配置的信息。

    • 信息。配置是代码配置对象。在本例中,因为您为喷火,这是一个编码器。MexCodeConfig对象。

    • 信息。InputFiles编码器。CodeFile对象。数组的每个元素都包含代码生成输入文件的文本、路径和扩展名。在这个例子中,数组只有一个元素,因为只有一个输入文件foo.m

      CodeFile with properties: Text: 'function b = foo(a)←↵b = svd(a,0);←↵end←↵' Path: 'C:\coder\R2019a\Report Info Object\foo. txt ';m”扩展:“打烊”

    • 信息。GeneratedFiles编码器。CodeFile对象。数组的每个元素都包含生成文件的文本、路径和扩展名。在这个例子中,它是a21——- - - - - -1数组,因为25生成的文件。

      21×1带有属性的CodeFile数组:文本路径扩展

    • 信息。功能编码器。函数对象。数组中的每个元素都包含以下关于MATLAB函数或方法的信息:

      • 名称和专业化。

      • 编码器。CodeFile对象,用于包含该函数或方法的输入文件。该对象也包含在信息。InputFiles

      • 函数或方法在文件文本中的起始和结束索引。

      在这个例子中,信息。功能有一个元素,因为在输入文件中只有一个MATLAB函数foo.m

      Name: 'foo'特化:0文件:[1×1编码器。StartIndex: 1 EndIndex: 52

    • 信息。消息编码器。消息对象,该对象包含代码生成错误、警告和信息消息。在本例中,没有这样的消息。这个属性是一个空数组。

      0×1具有属性的消息数组:标识符类型文本文件StartIndex EndIndex
    • 信息。CodeInsights编码器。消息包含代码洞察的对象。这些见解是关于生成代码中的潜在问题的消息,如MATLAB代码的潜在差异和潜在的行主数组布局问题。这些消息也出现在代码生成报告中代码的见解选项卡。数组的每个元素都包含关于一个代码洞察的以下信息:

      • 消息的标识符和类型。

      • 信息的文本。

      • 邮件所属的类别和子类别。

      • 编码器。文件编码器。CodeFile对象,用于生成消息的输入文件。

      • 生成消息的文件文本部分的开始和结束索引。

      在这个例子中,有一个代码洞察。

      在生成的代码中,要操作的维度是自动选择的,可能与MATLAB不同。考虑将工作维度明确指定为常量。”文件:[1×1编码器。StartIndex: 41 EndIndex: 46

      要在文件的文本中建立索引,请使用StartIndexEndIndex属性。

      info.CodeInsights.File.Text (41:46)
      该命令显示生成代码洞察的文件文本的一部分。
      “和(c)”

    • 信息。BuildLogs编码器。BuildLog对象,该对象包含在代码生成期间生成的构建日志。构建日志包含编译和链接错误和警告。同样的构建日志也出现在代码生成报告中建立日志选项卡。数组的每个元素都包含一个构建日志的类型和文本。在本例中,有一个类型为的构建日志“目标”

示例:为签出工具箱许可证的成功代码生成创建报告信息对象

为检查工具箱许可证的代码生成过程创建报告信息对象。检查这个对象的属性。

  1. 定义MATLAB函数酒吧调用函数位差(统计学和机器学习工具箱)鸡尾酒疗法(小波工具箱)

    函数[u, v, w] =酒吧(x)% # codegenu =差(x);[v, w] = haart (x);结束

    生成C源代码酒吧.将输入参数的类型指定为1——- - - - - -One hundred.双精度的行向量。将代码生成报告信息导出到变量信息在你的基本MATLAB工作空间。

    codegen- c酒吧arg游戏{0 (1100)}-reportinfo信息
  2. 代码生成成功。检查info.Summary.ToolboxLicenses财产。

    1×2 string array "statistics_toolbox" " wavet_toolbox "

    此属性表明在代码生成期间检出了Statistics和Machine Learning Toolbox™和小波工具箱™许可证。

    请注意

    如果生成MEX代码,那么在加载MEX函数时将再次签出这些许可证。

    如果生成静态库或动态链接库,则只在代码生成期间检出工具箱许可证。代码生成器不会将许可签出写入生成的独立代码中。

示例:为失败代码生成创建报告信息对象

为失败的代码生成过程创建报告信息对象。检查这个对象的属性。

  1. 定义MATLAB函数喷火

    函数B = foo(a) B = svd(a,0);结束

    为生成一个MEX函数喷火.指定的输入一个作为字符串标量。将代码生成报告信息导出到变量信息在你的基本MATLAB工作空间。

    codegen配置:墨西哥人喷火arg游戏{“字符串标量”}-reportinfo信息

    代码生成失败,因为字符串标量不是MATLAB函数的有效输入圣言会.代码生成器创建报告信息对象信息在MATLAB的基本工作空间。

  2. 检查信息。总结信息。消息属性。

    • 信息。总结指示代码生成失败。

      输出文件:'C: coder\R2020b\License discovery\codegen\mex\foo' Processor: 'Generic->MATLAB Host Computer' Version: 'MATLAB coder 5.1 (R2020b)' ToolboxLicenses: [1×0 string]
    • 信息。消息编码器。消息对象,该对象包含代码生成错误、警告和信息消息。数组中的每个元素都包含关于一条消息的以下信息:

      • 消息的标识符和类型。

      • 信息的文本。

      • 编码器。CodeFile对象,用于生成该消息的输入文件。

      • 导致消息的文件文本部分的开始和结束索引。

      在本例中,有两个错误消息。所以,信息。消息是一个2——- - - - - -1数组中。

      2×1具有属性的消息数组:标识符类型文本文件StartIndex EndIndex

      查看数组的第一个元素info.Messages (1)

      带有属性的消息:Identifier: 'Coder:toolbox:unsupportedClass' T金宝appype: 'Error' Text: 'Function 'svd'未为类'string'的值定义。'文件:[1×1编码器。CodeFile] StartIndex: 26 EndIndex: 33
      使用StartIndexEndIndex属性索引到文件的文本。
      info.Messages (1) .File.Text (26:33)
      此命令显示导致错误消息的文件文本部分。
      “圣言(0)'

手动检查代码

要手动检查输入文件的文本,请按对应的行号和列号StartIndexEndIndex值是有用的。使用getLineColumn函数获取此信息。这个函数返回两个结构,其中包含对应的行号和列号StartIndexEndIndex分别。

在前面的例子中,要手动检查的部分foo.m导致第一个错误消息,显示文件的文本。

info.Messages (1) .File.Text

文件的文本显示为:

'函数b = foo(a) b = svd(a,0);结束的

访问导致第一个错误消息的文本部分的行号和列号。

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

的输出是:

startLoc = struct with fields: Line: 2 Column: 5 endLoc = struct with fields: Line: 2 Column: 12

这些位置对应于函数调用的开始和结束“圣言(0)'foo.m

将代码配置对象转移到NewMATLAB会话

假设您创建了一个报告信息对象信息然后在另一个MATLAB会话中使用它。如果信息。配置是用于独立代码生成的配置对象(编码器。CodeConfig编码器。EmbeddedCodeConfig),则可能发生以下行为:

  • 如果MATLAB主机对于第二次会话没有指定的硬件板info.Config.Hardware属性,配置参数info.Config.Hardware恢复为默认值。默认值为[]

  • 如果用于第二会话的MATLAB主机没有在中指定的工具链info.Config.Toolchain属性,配置参数info.Config.Toolchain恢复为默认值。默认值为“自动定位安装的工具链”

另请参阅

||||||||

相关的话题