[英]How can I abort program execution in MATLAB?
如何在不退出MATLAB的情況下在MATLAB中停止程序執行。 我正在尋找像C ++中的exit(1)之類的東西。
我試過退出/退出,但他們也殺了MATLAB,這不是我想要的行為。
理想情況下,我會使用try-catch來冒泡錯誤,但我正在修復現有的代碼,由於深度嵌套的調用堆棧而無法做到這一點。 謝謝!
編輯:
我也試過error
並return
,但它們最終在調用函數catch塊中,這也不是我想要的。 我只想停止已啟動的程序退出。
此外,Ctrl-C要求用戶停止執行,這也不是我想要的。
你想要的是相當於 CTRL-C,但是要通過命令而不是實際的用戶鍵按下來執行 。 @yuk建議使用Java Robot來模擬這個按鍵。 @Pursuit在他的函數terminateExecution
很好地利用了這個方法。 另一個基於Java的解決方案interrupt
是由@MattB提出的。
為了強有力地使用terminateExecution
,我發現有必要立即調用一個短暫的pause
,以便讓Java有時間發送按鍵並讓MATLAB處理它。 我認為你需要的所有嵌套的try
- catch
語句都會被破壞。
killTest.m
function killTest
try
annoyingFunction();
fprintf('Does not run.');
catch ME
fprintf('Fooled again! (%s)\n',ME.message);
end
end
function annoyingFunction()
somethingWrong = true; % more useful code here
if somethingWrong,
% error('annoyingFunction:catchableError','catchable error');
terminateExecution % by Pursuit
% interrupt % by Matt B.
pause(0.1)
end
end
例
您可以直接從子功能返回命令提示符,但看起來程序已被按鍵終止:
>> killTest
Operation terminated by user during killTest>annoyingFunction (line 17)
In killTest (line 4)
annoyingFunction();
>>
如果您改為使用error
(取消注釋annoyingFunction
的錯誤行來測試),它會被killTest
的catch
語句killTest
:
>> killTest
Fooled again! (catchable error)
建議更改interrupt
(簡化,更可靠地獲取命令窗口句柄和可讀性):
function interrupt
import java.awt.event.KeyEvent
import 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 * (now - datenum('1970', 'yyyy')));
args = javaArray('java.lang.Object',1);
args(1) = KeyEvent(cmdwin,KeyEvent.KEY_PRESSED,msTime,...
KeyEvent.CTRL_DOWN_MASK,KeyEvent.VK_C,KeyEvent.CHAR_UNDEFINED);
method = cmdwin.getClass().getDeclaredMethod('processKeyEvent',argSig);
method.setAccessible(true);
method.invoke(cmdwin,args);
注意:如果您可以鍵入要完全退出的內容,只需使用keyboard
,當它在調試提示符處停止時( K>>
)鍵入dbquit
,您將返回基本工作區命令提示符。 MATLAB Central新聞閱讀器提供了一種提供可點擊觸發器來執行dbquit
的可愛方法。 我的解決方案版本:
fprintf('Terminate execution?\n<a href="matlab: dbquit;">Yes</a> / <a href="matlab: dbcont;">No</a>\n');
keyboard
當運行這段代碼時,你得到一個像這樣的小提示:
Terminate execution?
Yes / No
“是”和“否”文本將是可單擊的,將執行dbquit
或dbcont
。
您正在尋找Ctrl+c
組合鍵。 這將中止任何程序的執行。 將光標移至MATLAB的命令窗口,然后按Ctrl+c
。
雖然有兩種情況甚至Ctrl+c
都無法停止執行:
Ctrl+c
不會有任何效果。 Ctrl+c
。 然后你沒有別的選擇,只能去任務管理器並停止MATLAB過程。
你的意思是
return
?
你也可以使用
error("free text argument")
也(作為調試工具)
keyboard
(但我認為已棄用)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.