Существует ли способ сохранить сообщения об ошибках MATLAB в файл?
Это может быть простой проблемой, но Google не мог дать мне ответ. Я скомпилировал исполняемый файл GUI для использования без лицензии MATLAB, и иногда замораживается. В эстетических целях я подавил окно команд, обычно сопровождающее такой исполняемый файл, таким образом, я не могу вывести сообщение об ошибке через командную строку. Я хотел бы иметь возможность создать журнал ошибок, который может быть послан по электронной почте мне для отладки.
Спасибо!
Используйте команду "дневник" для создания файла журнала. Это заставит Matlab записать копию всего вывода командной строки в файл, включая предупреждения, сообщения об ошибках и трассировку стека для необработанных исключений. Sendmail () может отправить его вам при ошибках. Если вы хотите сэкономить место, вы можете заставить программу удалять свой файл журнала при нормальном (без ошибок) выходе из программы.
IMHO, это предпочтительнее, чем использование «try ... catch; ошибки записи; end ", потому что:
Также есть опция командной строки, которая делает то же самое, я не знаете, как вызвать это для скомпилированного Matlab.
включая исключения Java, возникающие из потока AWT, и ошибки из обратных вызовов M-кода в вашем графическом интерфейсе, что может быть трудно получить try / catch.Также есть параметр командной строки, который выполняет аналогичные функции; Я не знаю, как вызвать это для скомпилированного Matlab.
включая исключения Java, возникающие из потока AWT, и ошибки из обратных вызовов M-кода в вашем графическом интерфейсе, что может быть трудно получить try / catch.Также есть параметр командной строки, который выполняет аналогичные функции; Я не знаю, как вызвать это для скомпилированного Matlab.
Но файл дневника может по-прежнему записывать дамп segfault.Также есть опция командной строки, которая выполняет аналогичные функции; Я не знаю, как вызвать это для скомпилированного Matlab.
Но файл дневника может по-прежнему записывать дамп segfault.Также есть опция командной строки, которая выполняет аналогичные функции; Я не знаю, как вызвать это для скомпилированного Matlab.
Используйте операторы try ... catch вокруг кода. В блоке catch вы можете записать ошибку, включая информацию о стеке. Используя sendmail, вы даже можете заставить код уведомлять вас об ошибках по почте (в идеале с помощью всплывающего окна, которое позволяет пользователям решить, хотят ли они поделиться с вами информацией о сбое)
try
% your code here
catch err
%open file
fid = fopen('logFile','a+');
% write the error to file
% first line: message
fprintf(fid,'%s\n',err.message);
% following lines: stack
for e=1:length(err.stack)
fprintf(fid,'%sin %s at %i\n',txt,err.stack(e).name,err.stack(e).line);
end
% close file
fclose(fid)
end
Отредактировано, чтобы быть более подробным о том, как писать ошибку сообщение в файл
Для более старых версий MATLAB вы можете использовать функцию LASTERROR , чтобы получить информацию о самой последней ошибке, выпущенной MATLAB. Однако в новых версиях MATLAB эта функция будет постепенно исключена.
Для более новых версий MATLAB я бы предложил использовать класс MException для захвата информации об ошибках . Вы можете поймать объект MException с помощью блока try-catch , как Джонас предложил , либо вы можете потенциально использовать статический метод MException.last , чтобы получить последнее неперехваченное исключение (в зависимости от того, как вы запускаете свой код):
%# OPTION 1:
%# --------
try
my_code();
catch ME
%# Save data in ME to file
end
%# OPTION 2:
%# --------
my_code();
ME = MException.last;
%# Save data in ME to file
Каким бы способом вы ни захватили объект MException, вы можете использовать MException.