在MATLAB中,大约有3种方法来定义函数:非注释.m
文件,.p
文件和编译后的代码(例如DLL,MEX)。
了解其中的定义功能在某些情况下可能会有所帮助,例如,在我们控制范围之外的某个功能上引入了重大更改时,我们想尝试恢复为旧的希望使我们的代码再次工作的版本;或尝试反向工程某些未公开的算法时。
which
函数通常非常擅长识别函数定义及其位置(适用于.m
,.p
和MEX),但在涉及到共享库函数,(最多)它指向仅注释文档文件:
>> which _mcheck
built-in (undocumented)
>> which svd
built-in (D:\Program Files\MATLAB\R2019a\toolbox\matlab\matfun\svd)
如果是这样,假设在执行代码的过程中调用了在共享库中找到的函数,如何找到包含它的特定文件(DLL)?
答案 0 :(得分:6)
事实证明,dbstop
可以用于此目的。例如:
>> which svd
built-in (D:\Program Files\MATLAB\R2019a\toolbox\matlab\matfun\svd)
>> dbstop svd
Warning: Entering debug mode is only supported within running MATLAB code files.
Warning: MATLAB debugger can only stop in MATLAB code files, and "libmwmathlinalg>svd" is not a MATLAB code file.
Instead, the debugger will stop at the point right before "libmwmathlinalg>svd" is called.
从那里开始,只需找到一个名为libmwmathlinalg
(带有相关扩展名)的文件-如果对驱动器进行索引,这并不是一件困难的事情。