任何运行时错误后在Matlab中指定回调

时间:2010-06-09 21:52:44

标签: matlab error-handling

有没有办法指定在Matlab中发生错误时要运行的代码?谷歌搜索我遇到了RunTimeErrorFcn和daqcallback,但我相信这些特定于数据采集工具箱。当我遇到一个bug时,我想要一些东西,比如访问一个未分配的变量。 (我使用一个名为PsychToolbox的库来接管GPU,所以我希望能够在返回命令提示符之前清除它的屏幕。)

3 个答案:

答案 0 :(得分:5)

一个技巧是通过发出命令来使用Error Breakpoints

dbstop if error

启用时,会导致MATLAB在错误点进入调试模式。您可以从主工具栏上的Debug菜单访问相同的功能。

breakpoints_dialog

答案 1 :(得分: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

答案 2 :(得分: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