我有一个由多个嵌套函数组成的项目。出于调试目的,我希望以这样或那样的方式保存所有内部变量,以便显示图形、回放代码等。
我还希望在计算时间方面尽可能透明。
我的第一个想法是创建一个全局变量,并在每个函数的末尾以编程方式将变量内的输入和输出存储为一个结构:
globalVariable.nameOfParentfunction_NameOfFunction.nameInput1 = valueInput1;
globalVariable.nameOfParentfunction_NameOfFunction.nameInput2 = valueInput2;
...
globalVariable.nameOfParentfunction_NameOfFunction.nameOutput1 = valueOutput1;
...
是否可以使用某种反射来获取输入/输出的名称和值,而不必解析编写函数的文件?
我发现了一个关于解析的好话题,但可能已经过时了
如何收集内部信号?
简单的解决方案是使用save
,它将把当前工作区(函数的上下文(中的所有变量保存到文件中。
如果要将值保存在内存中,而不是文件中,可以使用names = who
获取当前工作空间中定义的所有变量的列表,然后使用val = eval(names{i})
获取名为name{i}
的变量的值。
我建议将所有这些放在一个单独的函数中,您可以从任何其他函数调用该函数来存储其变量,以避免重复代码。此函数将使用evalin('caller',…)
来获取调用函数工作区中变量的名称和值。
请注意,使用eval
或evalin
会阻止MATLAB使用其JIT优化代码。它们的使用也很危险,因为它们可以执行任意代码,但是在这种情况下,您可以控制正在执行的内容,所以这是不需要担心的。