如何在MATLAB中中止程序执行?
如何在不退出MATLAB的情况下停止MATLAB中的程序执行。我正在寻找一些类似于C++中的Exchange(1)的东西。 我尝试过退出/退出,但它们也会杀死MATLAB,这不是我想要的行为 理想情况下,我会使用try-catch冒泡出错误,但我正在修复现有代码,由于调用堆栈嵌套很深,所以无法完成这项工作。谢谢 编辑: 我还尝试了如何在MATLAB中中止程序执行?,matlab,debugging,Matlab,Debugging,如何在不退出MATLAB的情况下停止MATLAB中的程序执行。我正在寻找一些类似于C++中的Exchange(1)的东西。 我尝试过退出/退出,但它们也会杀死MATLAB,这不是我想要的行为 理想情况下,我会使用try-catch冒泡出错误,但我正在修复现有代码,由于调用堆栈嵌套很深,所以无法完成这项工作。谢谢 编辑: 我还尝试了error和return,但它们最终出现在调用函数catch块中,这也不是我想要的。我只是想停止已启动的程序以退出 而且,Ctrl-C要求用户停止执行,这也不是我想要的
error
和return
,但它们最终出现在调用函数catch块中,这也不是我想要的。我只是想停止已启动的程序以退出
而且,Ctrl-C要求用户停止执行,这也不是我想要的
return
?
你也可以使用
error("free text argument")
另外(作为调试工具)
(但我认为这是不推荐的)您正在寻找
Ctrl+c
组合键。这将中止任何程序的执行。将光标移到MATLAB的命令窗口,然后按Ctrl+c
尽管有两种情况下,即使Ctrl+c
也无法停止执行:
Ctrl+c
不会有任何效果Ctrl+c
terminateExecution
,我发现有必要在之后立即调用一个简短的pause
,给Java时间发送按键,让MATLAB来处理它。所有嵌套的try
-catch
语句都将被破坏,我认为这是您需要的
killTest.m
功能测试
尝试
烦扰函数();
fprintf('不运行');
抓住我
fprintf('又被愚弄了!(%s)\n',ME.message);
结束
结束
函数烦扰函数()
有什么不对=正确;%这里有更有用的代码
如果出了什么事,
%错误('HatteringFunction:catchableError','catchableError');
按追踪终止执行%
%马特B中断%。
暂停(0.1)
结束
结束
示例
您可以直接从子功能返回命令提示符,但程序似乎被按键终止:
killTest
killTest>烦恼功能期间用户终止的操作(第17行)
在线测试(第4行)
烦扰函数();
>>
如果改为使用error
(取消注释烦扰函数
中的错误行以进行测试),它将被killTest
中的catch
语句捕获:
killTest
又被愚弄了!(可捕获错误)
建议对中断进行更改(简化、更可靠地获取命令窗口句柄和可读性):
功能中断
导入java.awt.event.KeyEvent
导入java.lang.reflection*
base=com.mathworks.mde.cmdwin.cmdwin.getInstance();
hCmd=base.getComponent(0.getViewport().getView();
cmdwin=handle(hCmd,'CallbackProperties');
argSig=javaArray('java.lang.Class',1);
argSig(1)=java.lang.Class.forName('java.awt.event.KeyEvent');
msTime=(8.64e7*(现在为datenum('1970','yyyy'));
args=javaArray('java.lang.Object',1);
args(1)=KeyEvent(cmdwin,KeyEvent.KEY_按下,msTime,。。。
KeyEvent.CTRL\u DOWN\u掩码、KeyEvent.VK\u C、KeyEvent.CHAR\u未定义);
方法=cmdwin.getClass().getDeclaredMethod('processKeyEvent',argSig);
方法setAccessible(true);
调用(cmdwin,args);
注意:如果您可以键入要完全退出的内容,只需使用
键盘
,当它在调试提示(K>
)处停止时,键入dbquit
,您将返回基本工作区命令提示。上提供了一种提供可单击触发器以执行dbquit
的可爱方法。我的解决方案版本:
fprintf('Terminate execution?\n<a href="matlab: dbquit;">Yes</a> / <a href="matlab: dbcont;">No</a>\n');
keyboard
“Yes”和“No”文本将可单击,并将执行
dbquit
或dbcont
刚刚发布,我也尝试了return和error,但它们都会出现在调用函数catch块中,这也不是我想要的。只有当用户想要打破它时,这才起作用。我想编写代码来停止执行。这种方法可以通过等待键盘输入并要求用户按ctrl-C退出程序来应用(否则我们可以通过调用exit来杀死Matlab)……但是,它仍然不理想,因为它需要用户干预。@NickKarnik True,而不是错误,你可以打印一条消息,然后暂停,等待CTRL-C。这是一个非常好的问题,但如果你不想使用异常,我认为没有解决方案。哈哈,我想要的是更像“这是一个非常简单的问题”。真奇怪。我可能不得不依赖exit,但除非我将其输出到日志文件,否则用户不会知道是什么击中了它们,但这还不是一个选项。谢谢我不太明白这个问题。你这是什么意思。你能举个例子,比如说,使用一个虚构的命令吗?当我运行一个应用程序时,它遇到了一个无法正常处理的致命错误…我想停止运行该程序,这样我就不会损坏计算数据,并允许用户进行必要的更正,然后重新启动运行,以便我们可以继续它停止的地方(本质上是kill/halt/stop/terminate/exit)。如果您知道可能发生错误的行,那么我认为您可以执行以下操作:1.保存所有工作区2.当错误发生时,保留您正在运行的语句/函数的记录,我认为这是可以执行的(到目前为止,我不知道如何执行)3.从数据库加载数据时运行该函数
fprintf('Terminate execution?\n<a href="matlab: dbquit;">Yes</a> / <a href="matlab: dbcont;">No</a>\n');
keyboard
Terminate execution?
Yes / No