存储mfile名称和行号

时间:2016-08-04 04:50:49

标签: matlab

出于调试目的,我想打印出m文件的名称和行号,以便在出现故障时说出类似

的内容。
Error at 197th line of run.m

鉴于Matlab显示此类型的错误消息,必须有一个解决方案。

我该怎么做?

===========后续问题==============

谢谢!但我得到了一个后续问题。

我有main.m,这是主要的m文件,main.m调用lower.m

我写了

info = dbstack()

try 
    error('Toto')
catch ME
    ME.stack
end

到main.m.然后Matlab显示

info = 

    file: 'main.m'
    name: 'main'
    line: 15

ans = 

    file: 'C:\Users\account1\Google Drive\1AAA-RA\11HHJK(O…'
    name: 'main'
    line: 18

但是,当我将dbstack和try-catch的东西写入lower.m时,Matlab不会显示任何确切的信息。

我运行了main.m和main.m,调用了较低级别的m文件,但它没有显示任何信息。

info = 

2x1 struct array with fields:

    file
    name
    line

ans = 

2x1 struct array with fields:

    file
    name
    line

如何让它显示每个文件,名称,行信息?

理想情况下,Matlab将显示main.m和lower.m的信息,如下所示:

    file1: 'main.m'
    name1: 'main'
    line1: 15
    file2: 'lower.m'
    name2: 'lower'
    line2: 6

这可能吗?

3 个答案:

答案 0 :(得分:1)

您可以使用Matlab Exception对象。行信息包含在“堆栈”属性中。

示例创建一个'test.m'脚本:

try
    error('Toto')
catch ME
    ME.stack
end

命令窗口的输出是:

>> test

ans = 

    file: 'D:\MATLAB\Sandboxes\AVLab\test.m'
    name: 'test'
    line: 2

或者没有try / catch,您可以使用MException.last。

请参阅文档链接http://www.mathworks.com/help/matlab/matlab_prog/capture-information-about-errors.html

答案 1 :(得分:1)

info = dbstack();

% info is now a struct that has 3 fields

% info.file
% is a string containing the file name in which the function appears.

% info.name 
% is a string containing the name of the function within the file.

% info.line
% is the line number on which dbstack was called

答案 2 :(得分:-1)

MATLAB的错误功能会自动显示文件名和行号。

function [ ] = wsgefiow9ey(  )
n = 7;
if n > 1
    msg = 'Error: n is too big.';
    error(msg)
end % if
end % function definition

click here to see console output resulting from call to MATLAB error function