代码之家  ›  专栏  ›  技术社区  ›  wich

编译matlab中的调用堆栈

  •  4
  • wich  · 技术社区  · 15 年前

    在matlab中,可以使用dbstack在当前时间检索调用堆栈,但是dbstack在matlab程序的独立编译版本中不可用,是否有获取调用堆栈的替代方法,或者至少是调用当前函数的函数?我想编写一个功能函数,它需要知道是谁调用的,但最好使用完整的调用堆栈。

    1 回复  |  直到 12 年前
        1
  •  11
  •   gnovice    15 年前

    以下是目前解决方案的现状:

    不过,我还有一个可能的解决方案,我认为是目前最“干净”的:使用错误处理机制来获取堆栈跟踪。这将根据您使用的matlab版本而有所不同…

    matlab 7.5版(r2007b)及更新版本:

    新的错误处理功能 MException class introduced in Version 7.5 . 您可以通过创建和抛出一个“虚拟”异常,然后立即捕获它并访问 stack field . 如果在函数中执行以下操作:

    try
      throw(MException('phony:error',''));
    catch ME
      callerStack = {ME.stack.name};
    end
    

    然后是细胞阵列 callerStack 将包含调用堆栈中所有函数的名称,第一个元素中包含当前函数名,最后一个元素中包含最上面的调用方名称。

    Matlab版本7.1(R14SP3)到7.4(R2007A):

    对于这些早期版本,您可以使用 ERROR 函数来抛出错误和 LASTERROR 函数捕获错误并获取堆栈信息:

    try
      error('phony:error','');
    catch
      s = lasterror;
      callerStack = {s.stack.name};
    end
    

    Matlab 7.0.4版(R14SP2)及以下版本:

    不幸的是, 最后错误 函数仅在中开始返回堆栈跟踪信息 MATLAB Version 7.1 因此,对于早期的matlab版本,没有我能想到的上述解决方案的版本。

    推荐文章