在堆栈中获取matlab文件的名称一步

时间:2012-04-11 13:34:16

标签: matlab callstack

我正在编写一个matlab脚本,我想知道堆栈中一步的脚本名称。我需要这个的原因是我在编写一个帮助脚本时要调用一些关于工作空间的基本事实,然后再进行更重的计算,并且辅助脚本应该能够在调用计算脚本时给出错误消息。

我已尝试使用mfilenamedbstack,但除了帮助脚本的名称外,我无法获得任何其他内容。

为了进一步解释,我有以下脚本:

  • verify_base_conditions:帮助脚本,在
  • 的第一行之一调用
  • heavy_stuff_calculation
  • sweet_mother_of_algorithms
  • general_entry_point:我在单元格中收集常用工作流程的脚本

我尽量保持入口点脚本尽可能小,并将重量较大的计算(或任何需要多行的事情)重构为基于任务的可重用脚本。如果我从入口点脚本调用sweet_mother_of_algorithms并且未满足运行此脚本的基本条件,我想看到如

的错误消息
Error: this_cool_var must be defined when running sweet_mother_of_algorithms
general_entry_point line 15

我尝试使用

error(['this_cool_var must be defined when running ' mdfilename])

和其他类似的结构,但除了verify_base_conditions之外,我无法说出错误信息。

如何找到在堆栈中运行一级的脚本名称?

(注意:我 > 我只想获取名为general_entry_point的脚本名称。)

1 个答案:

答案 0 :(得分:1)

dbstack应该适用于此。我认为这是对你的类似设置:

a.m:
  b;

b.m:
  c;

c.m:
  stack = dbstack;
  for i=1:3
    disp(stack(i));
  end

当我运行a;时,会打印出整个堆栈,包括b(我认为这是你想要的 - 调用堆栈中的第二个顶级项目。

或者,虽然这可能会给出完全相同的结果,但您可以抛出并捕获错误并查看其堆栈:

c.m:
  try
    error('What is on the call stack?');
  catch e
    for i=1:3
      disp(e.stack(i));
    end
  end