如何定位内置函数的定义位置?
How to locate where a built-in function is defined?
在MATLAB中,定义函数的方式大致有3种:non-comment-only .m
files, .p
files, and compiled code (e.g. 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)?
原来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
的文件(具有相关扩展名)- 如果您的驱动器已编入索引,这不是一项艰巨的任务。
在MATLAB中,定义函数的方式大致有3种:non-comment-only .m
files, .p
files, and compiled code (e.g. 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)?
原来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
的文件(具有相关扩展名)- 如果您的驱动器已编入索引,这不是一项艰巨的任务。