为了账号安全,请及时绑定邮箱和手机立即绑定

停止并继续从调试器执行吗?

/ 猿问

停止并继续从调试器执行吗?

慕神8447489 2019-11-19 14:42:59

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

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

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

我当前正在使用/考虑的两个选项是

  1. 代码中的dbstop命令(或(条件)断点)。缺点是有时我不想停止模拟几个小时,有时只想在几秒钟后停止模拟(而且我不一定事先知道),这种方法不能很好地工作:如果我将中断条件设置为每5分钟中断一次,那么我就无法让matlab在没有互动的情况下运行数小时。如果将条件设置为较高,则必须等待太长时间才能使条件达到。

  2. 包含代码以每隔几秒钟/分钟保存一次工作空间并将该工作空间导入到另一个Matlab实例中。缺点是这是一个很大的麻烦,也不一定允许我使用保存的工作区的状态恢复仿真,然后逐步执行代码进行几次迭代。

我希望有比2个更好的解决方案。谢谢您的任何建议!

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


查看完整描述

3 回答

?
慕的地6264312

这不一定是最好的方法,但是您可以模拟基于文件的信号/中断框架。可以通过在长时间的模拟循环中不时检查一次特定文件的存在来完成此操作。如果是这样,则使用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


查看完整回答
反对 回复 2019-11-19
?
潇潇雨雨

随着R2016a的发布,您只需在代码编辑器中单击“暂停”按钮,它将立即停止。键盘快捷键是Ctrl + F5。


要在程序运行时暂停其执行,请在“编辑器”选项卡中,单击“暂停”按钮。MATLAB在下一个可执行行*处暂停执行。


代码运行时,“开始”按钮将变为暂停状态:


此版本的另一个变化是可以在运行时添加/删除断点。以前,您显然无法做到这一点。


查看完整回答
反对 回复 2019-11-19
?
慕莱坞5435954

您可以在MATLAB编辑器中设置条件断点。您也可以使用DBSTOP来执行此操作。例如,这将在文件myFcn的第20行设置一个条件断点,当循环变量i是500的倍数时,它将停止执行:


dbstop in myFcn.m at 20 if rem(i,500) == 0

然后,您可以在检查某些变量后继续执行。


查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 38 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信