查找对特定内置MATLAB函数的间接调用

Den*_*din 5 debugging matlab built-in function-call

我想要什么?

我正在寻找一种方法来检测我的代码中调用特定函数的所有点.

我为什么要这样?

一些例子:

  • 有些输出是排序的或随机的,我想知道这发生了什么
  • 我正在考虑更改/重载一个函数,并想知道我的代码的哪一部分可能会产生影响

我试过了什么?

  • 我尝试在被调用的文件中放置一个断点.这仅适用于非内置函数,这些函数是从始终执行所有内容的短运行代码调用的.
  • 我试着"查找文件",这样,我可以很容易地找到直接调用sort,但它不是那么容易找到一个电话sort援引unique的例子.
  • 我试过depfun,它告诉我:
    • 是否会被召唤
    • 从哪里调用非内置函数
  • 我想过重载内置功能,但感觉就像是我的最后手段,因为我害怕弄得一团糟.| 编辑:由于功能优先,它也可能无济于事.

这个问题

跟踪从特定函数到特定(内置)函数的所有潜在(in)直接函数调用的最佳方法是什么.

Bas*_*els 3

我不完全理解你的用例,但我想你想要的大部分信息都可以使用 获得dbstack,它为你提供了调用某个函数的所有父函数的调用堆栈。我认为最简单的方法是重载像这样的内置函数(我尝试重载min):

function varargout = min(varargin)

% print info before function call
disp('Wrapped function called with inputs:')
disp(varargin)
[stack,I] = dbstack();
disp('Call stack:')
for i=1:length(stack)
    fprintf('level %i: called from line %i in file %s\n', ...
        i, stack(i).line, stack(i).file);
end

% call original function
[varargout{1:nargout}] = builtin('min', varargin{:});

% print info after function call
disp('Result of wrapped function:')
disp(varargout)
Run Code Online (Sandbox Code Playgroud)

我试图测试这个,但不幸的是我无法让它工作,matlab继续使用原来的函数,即使在玩了很多之后addpath。不知道我在那里做错了什么,但我希望这能让你开始......