matlab的栈,在编译的matlab中调用堆栈

到目前为止,这里是解决方案的所在:

>正如您所提到的,功能DBSTACK在list of functions that are not supported by the MATLAB Compiler上,因此无法使用.

>您还在评论中提到,即使函数EVALIN不在不受支持的函数列表中,您的编译器仍然不允许您使用它.最终拒绝了我建议的一些先前的解决方案.

>通过在函数调用链中传递参数(或者可能将它们存储在global variable中)来维护自己的堆栈跟踪不是一个理想的选择,因为它需要维护的复杂性和额外工作.

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

MATLAB版本7.5(R2007b)和更新版本:

MException class形式的新错误处理功能是introduced in Version 7.5.您可以通过创建并抛出“虚拟”异常从MException对象获取有关堆栈跟踪的信息,然后立即捕获它并访问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)及更早版本:

不幸的是,LASTERROR函数只在MATLAB Version 7.1中开始返回堆栈跟踪信息,所以我没有为早期的MATLAB版本提供上述解决方案的版本.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值