在 UI 中建立一個暫停回撥執行的按鈕

有時我們想暫停程式碼執行以檢查應用程式的狀態(請參閱除錯 )。通過 MATLAB 編輯器執行程式碼時,可以使用 UI 中的暫停按鈕或按 Ctrl + c (在 Windows 上)完成此操作。但是,當從 GUI 啟動計算時(通過某些 uicontrol 的回撥),此方法不再起作用,並且應通過另一個回撥中斷回撥。以下是這個原則的演示:

function interruptibleUI
dbclear in interruptibleUI % reset breakpoints in this file
figure('Position',[400,500,329,160]); 

uicontrol('Style', 'pushbutton',...
          'String', 'Compute',...
          'Position', [24 55 131 63],...
          'Callback', @longComputation,...
          'Interruptible','on'); % 'on' by default anyway
      
uicontrol('Style', 'pushbutton',...
          'String', 'Pause #1',...
          'Position', [180 87 131 63],...
          'Callback', @interrupt1);       

uicontrol('Style', 'pushbutton',...
          'String', 'Pause #2',...
          'Position', [180 12 131 63],...
          'Callback', @interrupt2);    

end

function longComputation(src,event)
  superSecretVar = rand(1);
  pause(15);
  print('done!'); % we'll use this to determine if code kept running "in the background".
end

function interrupt1(src,event) % depending on where you want to stop
  dbstop in interruptibleUI at 27 % will stop after print('done!');
  dbstop in interruptibleUI at 32 % will stop after **this** line.
end

function interrupt2(src,event) % method 2
  keyboard;
  dbup; % this will need to be executed manually once the code stops on the previous line.
end

要確保你瞭解此示例,請執行以下操作:

  1. 將上面的程式碼貼上到一個名為的新檔案中,並將其儲存為 interruptibleUI.m,這樣程式碼就會從檔案的第一行開始 (這對第一種方法起作用很重要)。
  2. 執行指令碼。
  3. 點選,Compute 然後不久點選其中一個 Pause #1 或 Pause #2。
  4. 確保你能找到 superSecretVar 的價值。