如何在MATLAB中跟踪函数调用?

我想要一种方法来跟踪在特定工作空间变量上运行的所有函数调用 – 例如,将通过各种信号处理函数转换的声音波形.

一个繁琐而脆弱的方法是这样做:

>> 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的右下角.

点赞