在单元模式下运行时,使MATLAB显示错误位置

时间:2014-05-19 16:52:23

标签: matlab error-handling

我通常在顶层运行脚本中的代码。假设我有一个脚本my_error_script.m,如此:

my_mat = (1:100) / 2;
idx = my_mat(21);
my_mat(idx) = 4;

当我从matlab提示符运行时,我得到以下输出:

Attempted to access my_mat(10.5); index must be a positive integer or logical.

Error in my_error_script (line 3)
my_mat(idx) = 4;

发生了错误,很明显发生了这种情况(即第3行)。运行非常大的脚本时,这是有用的信息。

通常我只在单元格模式下运行脚本的一部分(我认为现在称为代码部分):

% < blah >

%% Run just this cell
my_mat = (1:100) / 2;
idx = my_mat(21);
my_mat(idx) = 4;

%% 

% < blah >

在这种情况下,我没有显示错误的位置:

Attempted to access my_mat(10.5); index must be a positive integer or logical.

这可能会使追踪较长脚本中的错误变得非常令人沮丧,即使它们只有10-20行长。

除了将脚本放入一个函数(并不总是理想的)或在循环中的各个点添加disp语句之外,还可以做些什么来显示错误的行号或位置? / p>

启用dbstop if error甚至不会将脚本暂停在正确的位置。

1 个答案:

答案 0 :(得分:1)

我认为,对你的问题的简短回答是,目前,#34;没有。&#34;

这是MathWorks对Matlab acknowledged的一个已知限制。在单元格模式下启用带有错误消息的行号(现在重命名为代码段)显然在列表中以供将来发布。但是,自at least 2008以来它一直在列表中,并且实施时间表似乎不清楚。

基本上,如果您想要包含错误的行号,您唯一的选择是使用代码段以外的其他内容。建议的解决方法包括:

  • 突出显示小块代码并按F9评估选择(您仍然不会获得行号,但它将被限制为较小的代码块)
  • 创建更多更小的单元格并按顺序运行它们(与上面相同)
  • 从顶部运行代码(您将获得行号,但将丢失代码段功能)
  • 重新构建代码,这样您就不会使用代码段

正如您所发现的,正常的调试工具也不能使用代码段。