我想要一种方法来跟踪在特定工作空间变量上运行的所有函数调用 – 例如,将通过各种信号处理函数转换的声音波形.
一个繁琐而脆弱的方法是这样做:
>> cfg = [];
>> curr_call = 'data_out = my_function(cfg,data_in);';
>> eval(curr_call);
>> data_out.cfg.history = cat(1,data_out.cfg.history,{curr_call});
更好的是以下内容:
>> cfg = [];
>> data_out = my_function(cfg,data_in);
>> data_out.cfg.history
'data_out = my_function(cfg,data_in);'
编辑澄清:换句话说,这个变量有一个字段cfg.history,它跟踪所有已在其上运行的历史启用函数(理想情况下使用参数).无论函数调用源自何处,都应更新历史字段:上面的示例来自命令行,但是从单元格模式或脚本中进行的调用也应附加到历史记录中.显然,我可以在上面的示例中编辑my_function(),以便它可以修改历史记录字段.
请注意以下讨论:执行此操作的动机是将历史记录“附加”到相关数据中,而不是说,在单独的日志文件中,然后需要以某种方式将数据打包.
可以这样做吗?
最佳答案 您可以使用以下代码访问完整的会话历史记录:
import com.mathworks.mlservices.MLCommandHistoryServices
history=MLCommandHistoryServices.getSessionHistory;
要获得您想要的内容,请使用以下代码:
import com.mathworks.mlservices.MLCommandHistoryServices;
startcounter=numel(MLCommandHistoryServices.getSessionHistory);
disp('mydummycommand');
disp('anotherdummycommand');
history=MLCommandHistoryServices.getSessionHistory;
commands=cell(history(startcounter-2:end-1));
请注意,这些功能没有记录.它使用命令历史记录,该历史记录通常位于matlab的右下角.