Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 停止并继续从调试器执行吗?

有没有什么办法可以像ctrl + c一样从调试器中停止执行matlab程序,但是又可以继续执行(就像您在c#中那样)?

如果不是,除了尝试在matlab代码中抢先设置断点或dbstop语句以外,还有什么更好的解决方法?

我希望能够中断长时间运行的仿真以查看当前状态,然后继续仿真。

我当前正在使用/考虑的两个选项是
  1. 代码中的dbstop命令(或(条件)断点)。缺点是有时我不想停止模拟几个小时,有时只想在几秒钟后停止模拟(而且我不一定事先知道),这种方法不能很好地工作:如果我将中断条件设置为每5分钟中断一次,那么我就无法让matlab在没有互动的情况下运行数小时。如果将条件设置为较高,则必须等待太长时间才能使条件达到。
  2. 包含代码以每隔几秒钟/分钟保存一次工作空间并将该工作空间导入到另一个Matlab实例中。缺点是这是一个很大的麻烦,也不一定允许我使用保存的工作区的状态恢复仿真,然后逐步执行代码进行几次迭代。
我希望有比2个更好的解决方案。谢谢您的任何建议!

编辑 :我想我要做的是编写简单的matlab函数,该函数每次迭代都会检查环境变量或磁盘上的文件,如果我在此文件或环境中设置了标志,则会调用dbstop。通过这种方式,我可以通过编辑文件来控制何时(如果需要,可以从多个matlab外部)命中断点。凌乱,但应该可以。



回答:

这不一定是最好的方法,但是您可以模拟基于文件的信号/中断框架。可以通过在长时间的模拟循环中不时检查一次特定文件的存在来完成此操作。如果是这样,则可以使用keyboard命令进入交互模式。

大致情况:

CHECK_EVERY = 10; %# like a polling rate tic i = 1; %# loop counter while true %# long running loop if rem(i,CHECK_EVERY) == 0 && exist('debug.txt','file') fprintf('%f seconds since last time.\n', toc) keyboard tic end %# ... long calculations ... i = i + 1; end 您将像往常一样运行模拟。当您想插入代码时,只需创建一个文件debug.txt (通常就是这样),执行就会停止,并得到提示:

2.803095 seconds since last time. K>> 然后,您可以像往常一样检查变量...要继续,只需运行return (不要忘记临时重命名或删除文件)。为了退出,请使用dbquit

编辑:对我来说,不是检查文件,而是一个更简单的解决方案,是使用一个虚拟图形作为标志(只要该图形是打开的,继续运行)。

hFig = figure; drawnow while true if ~ishandle(hFig) keyboard hFig = figure; drawnow end %# ... pause(0.5) end

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 01:19


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.