簡體   English   中英

如何在MATLAB中中止程序執行?

[英]How can I abort program execution in MATLAB?

如何在不退出MATLAB的情況下在MATLAB中停止程序執行。 我正在尋找像C ++中的exit(1)之類的東西。

我試過退出/退出,但他們也殺了MATLAB,這不是我想要的行為。

理想情況下,我會使用try-catch來冒泡錯誤,但我正在修復現有的代碼,由於深度嵌套的調用堆棧而無法做到這一點。 謝謝!

編輯:

我也試過errorreturn ,但它們最終在調用函數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的錯誤行來測試),它會被killTestcatch語句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

“是”和“否”文本將是可單擊的,將執行dbquitdbcont

您正在尋找Ctrl+c組合鍵。 這將中止任何程序的執行。 將光標移至MATLAB的命令窗口,然后按Ctrl+c

雖然有兩種情況甚至Ctrl+c都無法停止執行:

  1. 有時,如果MEX文件正在執行。 Ctrl+c不會有任何效果。
  2. 如果您的RAM太滿,甚至無法執行Ctrl+c

然后你沒有別的選擇,只能去任務管理器並停止MATLAB過程。

你的意思是

return 

你也可以使用

error("free text argument")

也(作為調試工具)

keyboard

(但我認為已棄用)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM