主要内容

交互跟踪MATLAB代码和生成的C/ c++代码

这个例子展示了如何在MATLAB之间进行跟踪®源代码和生成的C/ c++代码。在源代码和生成的代码之间跟踪可以帮助您:

  • 理解代码生成器是如何实现算法的。

  • 调试生成代码中的问题。

  • 评估生成代码的质量。

如果你有嵌入式编码器®并使生成的代码生成报告具有可追溯性,您可以查看MATLAB源代码和生成的C/ c++代码彼此相邻。当您将指针移动到代码上方时,您可以沿着高亮显示的轨迹到相应的生成代码或源MATLAB代码。

创建MATLAB源代码

为了演示交互式跟踪,这个示例生成了一个报告,用于为MATLAB函数生成一个C静态库lpsolve解决了线性规划:

  • 最大化y = c*x

  • 以A*x <= b为条件

  • x >= 0, b >= 0

lpsolve

该示例还使用了一个test函数lpsolve_test调用lpsolve具有代表性的输入值。

lpsolve_test

复制lpsolve.m而且lpsolve_test.m到可写文件夹。

拷贝文件(fullfile (docroot,“工具箱”“是”“例子”“lpsolve.m”)复制文件(fullfile (docroot,“工具箱”“是”“例子”“lpsolve_test.m”))

为代码生成做准备

在生成C/ c++代码之前,最好是筛选MATLAB代码,以便为代码生成做好准备。

coder.screener (“lpsolve”

代码生成准备报告表明了这一点lpsolve适用于代码生成。

通过生成和测试MEX函数来检查运行时问题也是一种最佳实践。

  • 要指定输入参数的类型,请将代表性输入值传递给codegenarg游戏选择。或者,因为您有一个测试函数,您可以使用coder.getArgTypes来确定类型。

  • 要生成和测试MEX函数,请使用以及选择。

C = [2 3 1 1];A = [2 3 1 -1;1 0 2 1;0 2 1 1];B = [27;9;18];codegenlpsolvearg游戏{c A b}以及lpsolve_test
正在运行的测试文件:“lpsolve_test”带有MEX函数“lpsolve_mex”。X = 5 70 0 4 y = 35

codegen成功生成并运行MEX函数。

生成具有可追溯性的代码生成报告

要生成具有交互式可追溯性的报告:

  • 创建一个编码器。EmbeddedCodeConfig对象。的EnableTraceability属性控制可追溯性。默认情况下,EnableTraceability属性是真正的

  • 控件传递有代表性的输入值来指定输入参数的类型arg游戏选择。

  • 控件来生成代码生成报告报告选择。

CFG = code .config(“自由”“是”,真正的);codegen配置cfglpsolvearg游戏{c A b}报告

报表中的访问跟踪模式

要打开代码生成报告,请单击查看报告

在代码窗格中,您可以看到lpsolve.m

上启用跟踪报告选项卡上,单击跟踪代码

您可以看到MATLAB源代码和生成的C代码放在一起。

跟踪代码

可以从MATLAB代码跟踪到C代码,或者从C代码跟踪到MATLAB代码。可跟踪代码在您要跟踪的一侧用蓝色标记,在您要跟踪的一侧用橙色标记。当您将指针移到可跟踪的代码上时,代码将以紫色突出显示,您将在另一侧看到到相应代码的跟踪。当您通过单击选中高亮显示的代码时,代码会变成黄色,即使您将指针移出所选内容,也可以看到跟踪。在按下之前,代码保持选中状态Esc或者选择不同的代码。要更改要跟踪的一侧,请选择另一侧的代码。

在示例报告中探索跟踪。

  1. 在MATLAB代码中,指向-循环,从第38行开始,向下滚动直到整个-loop在视图中。

    您可以看到这个符号,它告诉您高亮显示的MATLAB代码有一个不在视图中的跟踪。

    您可以在C代码窗格的单独窗口中看到相应的C代码。

  2. 类对应的C代码窗格中,向下滚动直到看到循环。

  3. 的不同语法元素上移动指针循环。突出显示变量、表达式和代码块。

    当您将指针移到较大表达式的一部分的表达式上时,不同深浅的紫色可以帮助您在相应的C代码中找到相关的表达式。例如,在第43行,暂停

  4. 在MATLAB代码中,将指针移回-从第38行开始的循环。当整个循环高亮显示为紫色时,单击它。当您将指针移到跟踪之外时,黄色高亮显示标识所选跟踪。

    要清除选择,按Esc或者选择不同的代码。

查看多条轨迹

当代码追踪到对应源代码或生成代码中的多个位置时:

  • 如果您在正在跟踪的代码上暂停,在代码窗格的顶部,您将看到跟踪的数量。

  • 如果一些跟踪不在视图中,您会看到一个符号,它告诉您有多少跟踪不在视图中。

  • 在代码窗格中,如果您选择要跟踪的代码,那么在代码窗格的顶部,您可以选择要查看的跟踪。

在报告中lpsolve,查看多条轨迹。

  1. 在行上暂停36

    在代码窗格的顶部,您可以看到这一行36有两个痕迹。

  2. 选择一行36

    在代码窗格的顶部,您可以看到第一个跟踪的位置。

  3. 要列出所有跟踪,请单击跟踪右侧的箭头。

查看跟踪到不同的文件

的代码生成报告lpsolve,所有来自MATLAB代码的跟踪都到一个C文件中lpsolve.c.如果MATLAB代码追溯到多个C文件,在C代码上面,您会看到一个符号,例如这将提供可以在其中查找跟踪的附加文件的数量。如果单击符号,就可以选择要查看的文件。如果您选择MATLAB代码,那么您可以选择您想要查看的跟踪。

同样,上面的MATLAB源代码,一个符号如表示高亮显示的C代码可追溯到多个MATLAB文件。

切换源代码和生成代码的位置

  1. 查看lpsolve.c在代码窗格的左侧,在生成的文件列表中,单击lpsolve.c

  2. 要查看代码窗格左侧的MATLAB代码,请单击MATLAB函数,例如:lpsolve

启用代码工具提示和链接

当你不在跟踪模式时:

  • 在MATLAB代码中,如果您指向一个变量或表达式,工具提示将提供诸如类型之类的信息。

  • 在C代码中,链接指向代码的其他部分,如类型或函数定义。

在跟踪模式下,要启用MATLAB代码工具提示和C代码链接,请长按Ctrl.MATLAB代码工具提示仅可用于选定的MATLAB函数。

在报告中lpsolve,查看变量的类型信息。

  1. MATLAB源窗格中,选择

  2. 在代码窗格中,按住Ctrl并在输入参数处暂停

请注意

在一个麦金塔电脑平台,使用命令键而不是Ctrl

禁用可追溯性

生成不包含可追溯性的代码生成报告:

  • 在一个编码器。EmbeddedCodeConfig对象,设置EnableTraceability财产

  • MATLAB编码器™应用程序,启用代码可追溯性没有

另请参阅

相关的话题