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

通过邮件发送的Matlab异常未显示错误行,matlab,exception,Matlab,Exception,在我的matlab脚本中,我向我发送了一封邮件,其中有一个异常告诉我,当错误发生时,它是哪种类型的错误 我面临的问题是,ME异常并没有像matlab通常所做的那样向我显示错误发生的位置(哪一行和代码的哪一部分)。我也看不到matlab终端中的错误(程序只是停止运行)。发送带有错误的邮件的代码如下: try % my script which can fail.... demo catch ME % An error will put here. errorMessage = sprintf('E

在我的matlab脚本中,我向我发送了一封邮件,其中有一个异常告诉我,当错误发生时,它是哪种类型的错误

我面临的问题是,ME异常并没有像matlab通常所做的那样向我显示错误发生的位置(哪一行和代码的哪一部分)。我也看不到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);

我错过了什么?

异常
ME
是一个MEException对象,它包含一个
标识符
消息
原因
堆栈
标识符
仅允许MATLAB对错误进行唯一识别。
消息
包含错误说明

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

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

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中找到有关异常的详细信息。

非常感谢您的帮助。但是,如何将ME.stack的内容连接到单个字符串中,以便通过邮件发送?我添加了一个代码示例,该示例生成的输出几乎与MATLAB控制台中的错误相同。我希望这有帮助