debugging - 可以从调试器停止并继续执行吗?

标签 debugging matlab

有没有什么方法可以像 ctrl+c 那样从调试器中停止执行 matlab 程序,但之后又能够继续执行(就像你可以说的 c#)?

如果不是,除了尝试在您的 matlab 代码中先发制人地设置断点或 dbstop 语句之外,是否有更好的解决方法?

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

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

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

  2. 包含每隔几秒/分钟保存一次工作区并将工作区导入第二个 matlab 实例的代码。缺点是这是一个巨大的麻烦,而且不一定允许我使用保存的工作区的状态恢复模拟,然后逐步执行代码进行几次迭代。

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

编辑:我想我要做的是编写简单的 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

关于debugging - 可以从调试器停止并继续执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3272541/

相关文章:

matlab - 打开新图像时如何在 Matlab 轴窗口中保留文本对象?

matlab - 在 32 位或 64 位 matlab 上运行?

android - 由 Intent 过滤器启动时调试应用程序

debugging - Intellij,Gradle:无法打开调试器端口(127.0.0.1:57850):java.net.SocketException “Socket closed”

c++ - Eclipse PTP 挂起 OpenMPI 应用程序的启动调试 session

arrays - 将矢量值加起来直到阈值,然后重新开始

matlab - 单应性投影变换

Matlab 导航函数工作区

c# - Visual Studio - 在不启动浏览器的情况下调试 Web 应用程序(运行本地 IIS)

xcode - iOS 8 : How to properly setup extension to debug it in Xcode using simulator?