Как найти, где определена встроенная функция? - PullRequest
3 голосов
/ 23 мая 2019

В 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), в котором он находится ?

1 Ответ

6 голосов
/ 23 мая 2019

Оказывается, что 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 (с соответствующим расширением), что не составит труда, если ваш диск проиндексирован.

...