Указание обратного вызова в Matlab после любой ошибки во время выполнения - PullRequest
4 голосов
/ 10 июня 2010

Есть ли способ указать код, который будет запускаться при возникновении ошибки в Matlab? Поиск в Google Я наткнулся на RunTimeErrorFcn и daqcallback, но я считаю, что они специфичны для панели инструментов сбора данных. Я хочу что-то для того, чтобы просто отключиться от ошибки, например, для доступа к неназначенной переменной. (Я использую библиотеку под названием PsychToolbox, которая берет на себя GPU, поэтому я хочу иметь возможность очистить ее экран перед возвратом в командную строку.)

Ответы [ 3 ]

5 голосов
/ 10 июня 2010

Если вы заключите свой код в блоки 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
5 голосов
/ 10 июня 2010

Одна хитрость заключается в использовании Точек останова с помощью команды:

dbstop if error

, который при включении заставляет MATLAB переходить в режим отладки в точке ошибки. Вы можете получить доступ к той же функциональности из меню Debug на главной панели инструментов.

breakpoints_dialog

0 голосов
/ 03 апреля 2013

Если кто-то использует 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...