Matlab中的一个可以使用dbstack检索该电话的堆在目前的时间,但是dbstack是不是可以在独立编制的版本matlab软件程序,是否有替代得到呼叫叠,或者至少能调用的当前功能?我想写一个设施的功能需要知道谁它被称为,但一个完整的电话叠将是可取的。

有帮助吗?

解决方案

这里就是解决方案迄今为止:

  • 如你所述,功能 DBSTACK 是上 名单的功能,不支持通过MATLAB编译器, ,所以它不能被使用。
  • 你也提到一种意见,即使功能 EVALIN 是不是就不支持的功能一览表编译器仍不会让你用它。结束了拒绝以前的一些解决方案,我建议。
  • 具有维护自己的堆跟踪通过参沿链的功能,电话(或者有可能通过把它们储存在一个 全球变)是不是一个理想的选择,由于复杂的和额外的工作,它将采取维护的。

然而,我有个可能的解决方案,我认为是"干净"一个尚未:使用错误的处理机制获得的堆踪。这将变化的基础上MATLAB版本,你使用的...

MATLAB版本7.5(R2007b)和较新的:

新的错误处理功能的形式 MException类推出版7.5.你可以得到的信息有关的堆跟踪从MException对象通过创建和投掷的一个"虚拟"的例外,然后立即抓住它,并访问 stack.如果你做的下列功能:

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

然后电池阵列 callerStack 将含有名称的所有功能在电话叠,与目前的功能中的名称的第一个元素和最顶端的呼叫者的名字在最后一个元素。

MATLAB版本7.1(R14SP3)通过7.4(R2007a):

对于这些早期版本可以使用 错误 功能扔一个错误和 LASTERROR 能捕捉错误和获得堆叠的信息:

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

MATLAB版本7.0.4(R14SP2)和前:

不幸的是, LASTERROR 功能只是开始返回堆跟踪信息 MATLAB版7.1, 因此没有版本的上述解决方案,我可以拿出对早先MATLAB版本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top