3

在 MATLAB 中,定义函数的方式大致有 3 种:非注释.m文件、.p文件和编译代码(例如 DLL、MEX)。

在某些情况下,了解函数的定义位置可能会有所帮助,例如当对我们无法控制的某个函数进行重大更改时,我们想尝试恢复到旧版本以希望让我们的代码再次工作; 或者当试图对一些未公开的算法进行逆向工程时。

which函数通常非常擅长识别函数定义及其位置(适用于.m.pMEX),但在涉及共享库函数时不是很有用,其中(充其量)它指向一个仅注释的文档文件:

>> which _mcheck
built-in (undocumented)

>> which svd
built-in (D:\Program Files\MATLAB\R2019a\toolbox\matlab\matfun\svd)

如果是这样,假设在我的代码执行期间调用了在共享库中找到的函数,我如何找到包含它的特定文件(DLL)

4

1 回答 1

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(具有相关扩展名)的文件 - 如果您的驱动器被索引,这不是一项艰巨的任务。

于 2019-05-23T07:52:14.613 回答