Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
在matlab中,可以在当前时间使用dbstack来检索调用堆栈,但是dbstack在matlab程序的独立编译版本中不可用,是否有替代方法来获取调用堆栈,或者至少是调用当前函数的函数?我想编写一个设施函数,需要知道谁被调用,但是最好使用完整的调用堆栈。
回答: 到目前为止,这里的解决方案是:
MATLAB版本7.5(R2007b)和更高版本: 在7.5版中引入了MException类形式的新错误处理功能。通过创建并抛出“虚拟”异常,然后立即捕获并访问stack字段 ,可以从MException对象获取有关堆栈跟踪的信息。如果在函数中执行以下操作: 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)和更早版本: 不幸的是, LASTERROR函数仅在MATLAB 7.1版中才开始返回堆栈跟踪信息,因此对于较早的MATLAB版本,我无法提供上述解决方案的版本。 更多&回答... |
![]() |
![]() |