首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法使用Matlab调试器来调试编译过的组件?

有没有办法使用Matlab调试器来调试编译过的组件?
EN

Stack Overflow用户
提问于 2011-12-19 01:51:33
回答 3查看 2.6K关注 0票数 3

有没有一种方法可以调试我编译的Matlab组件,使用原生的Matlab调试器,比如Visual Studio的“附加到进程”选项,或者类似的东西?

我指的是EXE独立文件、DLL、COM进程内服务器或.NET组件。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-19 08:25:59

您不能在能够逐行遍历MATLAB代码的意义上调试它们,因为您可以在编译之前使用MATLAB自己的调试器。MATLAB部署产品采取的步骤之一是加密MATLAB代码(这样您就可以在分发部署的组件时保留您的IP )。部署后在调试器中单步执行代码的能力将与此目的背道而驰。

票数 6
EN

Stack Overflow用户

发布于 2016-09-14 15:19:55

我尝试使用如下命令: try catch ME waitbar(0,ME.message) end

这是一个非常有效和通用的解决方案。

您可能希望将代码分解为多个部分,并对每个部分进行调试,以节省编译时间。

祝你好运,丹

票数 0
EN

Stack Overflow用户

发布于 2013-06-18 14:41:06

您可以按照说明进行调试:

调试:

使用调试工具将允许您在执行过程中停止您的程序,以检查变量的内容和其他可以帮助您发现程序中错误的内容。M-file程序在“断点处”停止。要创建断点,只需按F12键,光标所在行的旁边就会出现一个红点。您也可以单击M文件窗口左侧行号旁边的破折号,以获得相同的结果。

然后按F5或菜单中的Debug->Run来运行程序。它将在断点处停止,旁边会有一个绿色箭头。然后,您可以使用Debug菜单检查工作区中变量的内容、单步执行、继续或停止程序。要检查变量的内容,只需在工作区中键入它的名称,但要注意:您只能查看您停止的文件中变量的值,因此这意味着您可能需要多个断点来查找问题的根源。有几种不同的方法可以从断点在程序中移动。一种方法是逐行遍历整个程序,输入所调用的每个函数。如果您不知道问题所在,这是有效的。还有一种方法可以简单地遍历当前停止的函数,一次一行,而不是逐行遍历子函数,MATLAB会简单地给出这些函数的结果。

最后,请注意,在保存M文件之前,不能设置断点。如果您更改了某些内容,则必须在断点“通知”您的更改之前进行保存。在MATLAB中,通过将点从红色更改为灰色来描述这种情况。有时,您可以保存,但这些点仍然是灰色的;当您在多个文件中有多个断点时,就会发生这种情况。为了解决这个问题(这真的很烦人),你必须一直进入“退出调试模式”,直到它变成灰色。一旦您完全退出调试模式,您的文件将被保存,您将准备开始另一轮调试。使用注释帮助您调试代码。您想测试删除某些代码行的效果(例如,如果您删除它们,程序是否仍返回Inf ),您可以注释掉代码。为此,请将其突出显示,然后转到: Text -> Comment

或者按CTRL+R。这只会在每一行前面放一个'%‘;如果该行已经被注释掉了,它会在那里再放一个'%’,所以当你取消注释它们时,注释行的模式不会改变。注释行将被编译器忽略,因此其效果将是程序在没有它们的情况下运行。要取消注释一行,请转到Text ->取消注释或按CTRL+T。注释的另一个用途是测试两组不同的代码集之间的差异(例如,您可能想要测试使用ODE113而不是ODE45来求解微分方程的效果,这样您就可以分别使用一行调用它们)。您可以通过注释掉一个并运行程序,然后取消注释那个并注释掉另一个,然后再次调用该程序来测试差异。

如何避免无限循环?MATLAB不能直接告诉你有一个无限循环,它会尝试给你一些提示。第一次是在你终止程序的时候。通过按CTRL+C来终止它,MATLAB将给出一条消息,告诉您确切地停止在哪一行上。如果您的程序运行了很长时间,那么您停止的行很可能处于无限循环的中间。有时,MATLAB甚至不允许您返回主窗口按CTRL-C。在这种情况下,您可能必须终止整个MATLAB进程。在此之后,在循环中添加一个"pause (0.001)“或一个类似的小值,您怀疑它是无限的。每当MATLAB通过此指令时,您将能够在(非常)短的时间内与MATLAB进行交互,例如,转到主窗口并在MATLAB能够响应您的命令的情况下按CTRL-C。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8553559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档