2010-06-09 52 views
4

有沒有一種方法可以指定在Matlab中發生錯誤時運行的代碼? Googling我遇到了RunTimeErrorFcn和daqcallback,但我相信這些都是特定於數據採集工具箱。當我只是爲了一個錯誤而行,比如訪問一個未分配的變量時,我想要一些東西。 (我用了一個名爲PsychToolbox庫接管GPU,所以我希望能夠返回到命令提示符之前清除其屏幕。)在任何運行時錯誤後在Matlab中指定回調

+0

是否有可能,也許,寫了一個修改「DBSTOP 「運行一些代碼然後發送給內置的? (感謝嘗試/捕捉的想法,Jonas。) – JmG 2010-06-11 14:36:50

回答

5

一個技巧就是通過發出命令來使用Error Breakpoints

dbstop if error 

當啓用時,會導致MATLAB在錯誤點進入調試模式。您可以從主工具欄上的Debug菜單訪問相同的功能。

breakpoints_dialog

5

如果您在TRY/CATCH塊包裝你的代碼,你可以,如果發生錯誤,它可以根據使用MEXCEPTION對象的特定錯誤定製執行代碼。

try 
    % do something here 
catch me 
    % execute code depending on the identifier of the error 
    switch me.identifier 
    case 'something' 
     % run code specifically for the error with identifier 'something' 
    otherwise 
     % display the unhandled errors; you could also report the stack in me.stack 
     disp(me.message) 
    end % switch 
end % try/catch 
0

如果有人使用GUI,並希望有一個「全球性」的錯誤檢測,比的解決方案可能是這個樣子......

function varargout = Program(varargin) 
try 
     gui_Singleton = 1; 
     gui_State = struct('gui_Name',  mfilename, ... 
         'gui_Singleton', gui_Singleton, ... 
         'gui_OpeningFcn', @program_OpeningFcn, ... 
         'gui_OutputFcn', @program_OutputFcn, ... 
         'gui_LayoutFcn', [] , ... 
         'gui_Callback', []); 
     if nargin && ischar(varargin{1}) 
      gui_State.gui_Callback = str2func(varargin{1}); 
     end 
     if nargout 
      [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); 
     else 
      gui_mainfcn(gui_State, varargin{:}); 
     end 
catch exception 
     beep 
     h = errordlg('Unexpected error, the program will be restarted.','Syntax  
     error','modal'); 
     uiwait(h) 
     Program 
end 
相關問題