主要内容

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

您可以将有关代码生成的信息导出到基础MATLAB中的一个变量中®工作区。此变量包含coder.reportinfo.其属性包含此信息的对象:

  • 代码生成摘要,其中包括有关代码生成成功、日期和时间、输出文件的路径、处理器、版本等信息Matlab Coder™,工具箱许可证在代码生成,工具链和构建配置期间签出。

  • 代码生成配置对象。

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

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

  • 对于代码生成中涉及的所有MATLAB函数和方法:名称,专业化,文件,启动索引和结束索引。

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

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

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

coder.reportinfo.Properties

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

创建报表信息对象

假设您希望将代码生成报告信息导出到该变量信息在您的基础MATLAB工作区中。执行以下操作之一:

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

  • 在命令行中,使用Codegen.命令-Reportinfo.选择。后指定变量名-Reportinfo.选择。

    Codegen.myfunction.-Reportinfo.信息
  • 在命令行,设置代码配置对象属性ReportInfoVarName对角色矢量“信息”

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

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

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

  1. 定义MATLAB函数喷火

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

    生成MEX功能喷火。指定输入一种作为一个一维有上界的变大小矩阵3.第二维有一个上界5.。将代码生成报告信息导出到变量信息在您的基础MATLAB工作区中。

    Codegen.-config:mex.喷火-  args.{coder.typeof(的(1,1),[3 - 5],[1])}-Reportinfo.信息

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

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

    摘要:[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. 检查每个财产信息分别地。

    • info.summary.是一个编码器。总结其属性包含有关代码生成成功信息的信息,代码生成日期和时间,输出文件的路径,处理器,工具箱许可证在代码生成期间签出,以及版本Matlab编码器

      Summary with properties: Success: true Date: '08-May-2020 09:15:07' OutputFile: 'C:\coder\R2020b\License discovery\foo_mex。版本:'MATLAB Coder 5.1 (R2020b)' ToolboxLicenses: [1×0 string]

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

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

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

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

    • info.generatedFiles.是一个数组编码器对象。数组的每个元素包含生成文件的文本、路径和扩展名。在本例中,它是21.——- - - - - -1阵列因为有25.生成的文件。

      21×1带有属性的代码文件数组:文本路径扩展名

    • info.function.是一个数组编码器。函数对象。数组的每个元素包含以下MATLAB函数或方法的信息:

      • 名称和专业化。

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

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

      在这个例子中,info.function.有一个元素,因为在输入文件中只有一个MATLAB函数Foo.m.

      函数与属性:名称:'foo'专用:0文件:[1×1码码.Codefile] StartIndex:1 EndIndex:52

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

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

      • 标识符和消息的类型。

      • 信息的文本。

      • 消息所属的类别和子类别。

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

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

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

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

      要索引到文件的文本中,请使用startIndex.EndIndex属性。

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

    • info.buildlogs.是一个数组编码器。BuildLog对象,其中包含在代码生成期间生成的构建日志。构建日志包含编译和链接错误和警告。同样的构建日志也出现在代码生成报告中建立日志选项卡。阵列的每个元素都包含一个构建日志的类型和文本。在此示例中,有一个版本的类型'目标'

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

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

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

    函数[u,v,w] = bar(x)%#codegen.u =差(x);[v, w] = haart (x);结束

    生成C源代码酒吧。将输入参数的类型指定为1——- - - - - -One hundred.双打的行矢量。将代码生成报告信息导出到变量信息在您的基础MATLAB工作区中。

    Codegen.- c酒吧-  args.{0 (1100)}-Reportinfo.信息
  2. 代码生成成功。检查info.Summary.ToolboxLicenses财产。

    1×2 string array "statistics_toolbox" " wavet_toolbox "

    该属性表明统计和机器学习工具箱™和小波工具箱™许可在代码生成期间被检出。

    笔记

    如果生成MEX代码,请在加载MEX函数时再次选中这些许可证。

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

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

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

  1. 定义MATLAB函数喷火

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

    生成MEX功能喷火。指定输入一种作为字符串标量。将代码生成报告信息导出到变量信息在您的基础MATLAB工作区中。

    Codegen.-config:mex.喷火-  args.{“字符串标量”}-Reportinfo.信息

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

  2. 检查info.summary.信息。消息属性。

    • info.summary.表示代码生成失败。

      成功: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]
    • 信息。消息是一个数组编码器。消息对象,其中包含代码生成错误、警告和信息消息。数组的每个元素包含以下关于一条消息的信息:

      • 标识符和消息的类型。

      • 信息的文本。

      • 编码器对导致该消息的输入文件的对象。

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

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

      2×1消息数组,具有属性:标识符类型文本文件startIndex endIndex

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

      具有属性的消息:标识符:“编码器:工具箱:UnsupportedClass”类型:'错误'文本:'函数'sv万博1manbetxd'未定义类“字符串”的值。文件:[1×1码码.Codefile] StartIndex:26 EndIndex:33
      使用startIndex.EndIndex属性,以便索引到文件的文本中。
      info.messages(1).file.text(26:33)
      此命令显示导致错误消息的文件文本的一部分。
      “圣言(0)'

手动检查代码

若要手动检查输入文件的文本,则对应的行号和列号startIndex.EndIndex值是有用的。使用getLineColumn获取此信息的功能。此函数返回两个结构,该结构包含与相对应的行和列号startIndex.EndIndex分别。

在上面的例子中,手工检查的部分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.

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

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

  • 如果第二节的MATLAB主机没有在硬件板中指定info.config.hardware.属性安装在上面,配置参数info.config.hardware.恢复其默认值。默认值是[]

  • 如果第二次会话的MATLAB主机没有指定的工具链info.Config.Toolchain属性安装在上面,配置参数info.Config.Toolchain恢复其默认值。默认值是'自动找到安装的工具链'

也可以看看

||||||||

相关的话题