MATLAB - 强制退出(CTRL+C)无效?

4
我正在使用MATLAB运行一个计算量很大的遗传算法。代码已经运行了3天,但我相信它在某个地方卡住了,因为它没有打印出用于调试目的的进度信息。
现在我希望停止它。我尝试使用CTRL+C,但没有成功。窗口左下角仍然显示“忙”。
我不能简单地退出整个MATLAB,因为我需要检查变量窗口中它卡住的位置。
鉴于CTRL+C无效,我该如何:
1. 停止执行,或者 2. 保存变量以供检查?

您是否在运行任何MEX代码?一旦将MATLAB传递到MEX以运行代码,您将无法使用“Ctrl + C”来停止您的代码。唯一的方法是退出程序。但是,如果您正在运行本地MATLAB代码,请进入编辑器并在您知道它会变得繁忙的代码部分中插入断点。代码应该在该断点处暂停,并向您提供此时范围内的所有变量。 - rayryeng
MEX代码是指在MATLAB中运行C代码。MATLAB有能力在其环境中调用C代码,因为我们知道C代码比大多数本地MATLAB函数运行得更快。从经验来看,如果MEX代码永远运行下去,它没有使用快捷键退出的能力。我对COMSOL不太熟悉,所以这里无法给您任何建议。 - rayryeng
@rayryeng 非常感谢,但是COMSOL是用Java开发的。那么我可以说这不是MEX吗?在退出MATLAB之前有没有办法获取变量? - Sibbs Gambling
1
哦,是的。我忘了你也可以在MATLAB中调用Java代码。没错,绝对不是MEX。当你运行COMSOL时,它是否在一个大循环内?尝试在每次迭代之前引入一个小暂停(pause(0.01)),这样它会给你一个停止执行(Ctrl+C)的机会。你还可以尝试编写一个finish.m文件并将其包含在你的工作目录中。finish.m将在MATLAB退出之前执行。因此,在退出之前只需在finish.m中执行一个save命令,将你的工作区中的所有变量保存到文件中。希望这些方法中的其中一个能帮到你。 - rayryeng
1
从个人经验来看,当使用计算密集型算法时,有时候强制退出并不能起作用。在MATLAB中,实际上会在你按下Ctrl+C几个小时后停止运行脚本。 - Adarsh Chavakula
显示剩余2条评论
1个回答

3
有时,如果您遇到内存超额分配问题,例如尝试分配无法适应内存的矩阵,导致虚拟内存开始抖动,那么ctrl-C可能会停止工作。
而且,在执行传递给COMSOL时,crtl-C也很可能无法正常工作。
我认为现在您别无选择,只能杀死matlab并尝试通过逐步执行代码或插入fprintf语句来调试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接