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

时间:2014-06-05 16:58:06

标签: 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(),以便它可以修改历史记录字段。

注意以回应下面的讨论:这样做的动机是让历史“附加”到有问题的数据,而不是说,在一个单独的日志文件中,然后需要以某种方式打包数据。

可以这样做吗?

1 个答案:

答案 0 :(得分:2)

您可以使用以下代码访问完整的会话历史记录:

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