有没有一种方法将MATLAB错误信息保存到文件中?
这可能是一个简单的问题,但我在谷歌上找不到答案。我编译了一个GUI可执行文件,可以在没有MATLAB许可证的情况下使用,但偶尔会卡住。为了美观起见,我禁止了通常伴随此类可执行文件的命令窗口,因此我无法通过命令提示符获得错误消息。我想能够创建一个错误日志,可以通过电子邮件发送给我进行调试。
谢谢!
有没有一种方法将MATLAB错误信息保存到文件中?
这可能是一个简单的问题,但我在谷歌上找不到答案。我编译了一个GUI可执行文件,可以在没有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类来捕获错误信息。你可以使用try-catch块捕获MException对象,就像Jonas建议的那样,或者你可以潜在地使用静态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
msgString = getReport(ME,'basic'); %# Displays the higher level error
msgString = getReport(ME,'extended'); %# Displays the error and the stack
try
% your code here
catch err
fid = fopen('errorFile','a+');
fprintf(fid, '%s', err.getReport('extended', 'hyperlinks','off'))
fclose(fid)
end
要获得与Matlab命令窗口完全相同的格式样式,请使用:
rep = getReport(exception, 'extended', 'hyperlinks', 'off');
name = strcat('Data\', name, '.txt');
fid = fopen(name, 'w+t','n');
fprintf(fid, 'Error message\n-------------\n\n');
fprintf(fid, '%s\n', rep);
fclose('all');