通过邮件发送的Matlab异常未显示错误行

时间:2014-12-22 09:43:14

标签: matlab exception

在我的matlab脚本中,我发送一封邮件给我,但有异常告诉我,当发生错误时,会出现哪种错误。

我面临的问题是,ME异常并没有向我显示错误发生的位置(代码的哪一行和代码的哪一部分)通常都是如此。我也看不到matlab终端中的错误(程序停止运行)。发送带有错误的邮件的代码如下:

try
% my script which can fail....
demo
catch ME
% An error will put here.
errorMessage = sprintf('Error in demo. The error is: %s', ME.message);
%this function just sends the mail
sendmail2me(errorMessage);

我错过了什么?

1 个答案:

答案 0 :(得分:2)

异常ME是一个MException对象,其中包含identifiermessagecausestackidentifier仅允许MATLAB对错误进行唯一标识。 message包含错误说明。

cause包含导致当前异常的MExceptions数组。这允许您跟踪异常以查找错误的根。由于cause是一个(可能是空的)MException对象数组,您可以遍历数组中的cause并将信息写入邮件。

最重要的是stack。它是一个包含三个字段的结构:filenameline。 File是发生错误的文件/函数的完整路径。名称(显然)是文件的名称,并且(显然)保存了发生异常的行。如果在从函数/脚本调用的函数中发生错误,则stack也可以是数组。因此,最好在for循环中查看stack,并连接错误消息和堆栈内容。

try
    demo;
catch ME
    errormsg = sprintf('%s\n',ME.message);
    for k=1:length(ME.stack)
        errormsg = sprintf('%s\nError in %s (line %d)\n', ...
                   errormsg,ME.stack(k).name,ME.stack(k).line);
    end
    sendmail2me(errormsg);
end

您可以在MATLAB help pages中找到有关例外的更多详细信息。