Этот пример показывает, как отладить файл MEX yprime
с помощью XCode.
Скопируйте исходный файл MEX
Исходный код yprime.c
находится в папке matlabroot
. В MATLAB® скопируйте файл в локальную, перезаписываемую папку, например, /Users/Shared/work
. Создайте папку, если она не существует и установила его как вашу текущую папку в MATLAB.
workdir = fullfile('/','Users','Shared','work'); mkdir(workdir) copyfile(fullfile(matlabroot,'extern','examples','mex','yprime.c'),workdir) cd(workdir)
Скомпилируйте исходный файл MEX
Скомпилируйте исходный файл MEX с опцией -g
, которая добавляет отладочную информацию. MATLAB создает бинарный файл MEX, yprime.mexmaci64
.
mex -g yprime.c
Создайте пустую рабочую область XCode для отладки
В XCode,
Выберите File> New> Workspace.
В диалоговом окне выбора файла, определенном имя Рабочей области в поле Save As: к debug_yprime
.
Выберите папку /Users/Shared/work
, в которой можно сохранить рабочую область. Чтобы выбрать папку, или перейти к папке, или нажимают горячую клавишу Command+Shift+G, чтобы переключить меню Go to the folder: и ввести полный путь /Users/Shared/work
.
Нажмите Save.
Добавьте файлы yprime
в рабочую область XCode
Чтобы добавить файл yprime.c
в рабочую область, перетащите его от папки /Users/Shared/work
в Средстве поиска в столбец навигатора на левой стороне окна рабочей области XCode.
Очистите опцию Destination, Copy items into destination group's folder (if needed)
. Очистка этой опции позволяет точкам останова быть добавленными к файлу, который запускает MATLAB.
Чтобы добавить файл, нажмите Finish.
Создайте схему
Выберите Product> Scheme> New Scheme....
Оставьте набор Target None
.
Установите Name на debug
.
Нажмите OK. Схема, редактирующая диалоговое окно, открывается.
Установите Run> Info> опция Executable к Other.... В окне выбора файла нажмите горячую клавишу Command+Shift+G, чтобы переключить меню Go to the folder:. Задайте полный путь к исполняемому файлу MATLAB_maci64
в пакете приложения MATLAB. Примером полного пути является /Applications/MATLAB_R2016a.app/Contents/MacOS/MATLAB_maci64
.
Выберите Wait for executable to be launched.
Нажмите Close.
Добавьте символьную точку останова
Выберите Debug> Breakpoints> Create Symbolic Breakpoint.
Установите Symbol на NSApplicationMain
.
Чтобы добавить следующую команду отладчика, нажмите Add action:
process handle -p true -n false -s false SIGSEGV SIGBUS
Если редактор точки останова, панель исчезает, щелкает правой кнопкой по новой точке останова и выбирает Edit Breakpoint…, чтобы возвратиться к ней
Проверяйте Automatically continue after evaluating actions.
Установка точек останова в вашем файле MEX
Выберите View> Navigators> Show Project Navigator.
Нажмите yprime.c
в столбце навигатора.
Кликните по полю рядом со строкой, где вы хотите, чтобы выполнение сделало паузу, например, в первой строке в mexFunction()
.
Для получения дополнительной информации обратитесь к документации XCode.
Запустите отладчик XCode и запущенный MATLAB
Чтобы запустить отладчик, в XCode выбирают Product> Run. Также нажмите кнопку Run с треугольным значком около левого верхнего угла окна рабочей области.
Ожидайте XCode, чтобы отобразить сообщение Waiting for MATLAB to launch
наверху окна Workspace. Это действие может занять несколько секунд, особенно в первый раз, когда вы используете эту процедуру.
Запустите исполняемый файл MATLAB с подсказки Терминала Mac (см., Начинают с Окна терминала), или со Средства поиска. Если MATLAB уже запускается, щелкните правой кнопкой по значку MATLAB по Прикреплению и выберите Open Additional Instance of MATLAB.
XCode отображает сообщение Running MATLAB: debug
.
Запустите бинарный файл MEX в MATLAB
В этом новом экземпляре MATLAB измените текущую папку на папку с файлами yprime
и запустите файл MEX.
workdir = fullfile('/','Users','Shared','work'); cd(workdir) yprime(1,1:4)
Отладчик XCode останавливается в yprime.c
в первой точке останова.
В этой точке можно продвинуться через код, исследовать переменные, и т.д., но для этого осуществления, выбрать Continue из меню Debug. Выполнение концов yprime
и отображений MATLAB:
ans = 2.0000 8.9685 4.0000 -1.0947
Пока этот экземпляр MATLAB продолжает запускаться, можно неоднократно выполнять файл MEX и остановы XCode в точках останова, которые вы устанавливаете.
LLDB является отладчиком, доступным с XCode в macOS системах. Обратитесь к документации, которой предоставляют ваш отладчик для получения дополнительной информации о его использовании.
В этой процедуре >>
указывает на подсказку команды MATLAB, и %
представляет подсказку Терминала Mac. Подсказкой отладчика является (lldb)
.
Этот пример отлаживает файл MEX yprime
без Виртуальной машины Java® (JVM™). Рабочий MATLAB в этом режиме минимизирует использование памяти и улучшает начальную скорость запуска, но ограничивает функциональность. Например, вы не можете использовать рабочий стол.
Скомпилируйте исходный файл MEX с опцией -g
, которая создает файл с включенной отладочной информацией. В Терминальной подсказке введите:
% mex -g yprime.c
Запустите lldb отладчик с помощью функции matlab
опция -D
:
% matlab -Dlldb
Запустите MATLAB с помощью флага запуска -nojvm
:
(lldb) run -nojvm
В MATLAB позвольте отладить с функцией dbmex
и запустите свой файл MEX:
>> dbmex on >> yprime(1,1:4)
Отладчик захватывает пользовательский сигнал, и подсказка возвращается к lldb.
Вы готовы начать отлаживать.
Часто удобно установить точку останова в mexFunction
, таким образом, вы останавливаетесь в начале стандартной программы шлюза.
(lldb) b mexFunction
Если вы поражаете точку останова, можно использовать любые команды отладчика, чтобы исследовать переменные, память отображения, или осмотреть регистры. Чтобы проистечь из точки останова, введите:
(lldb) c
После остановки в последней точке останова введите:
(lldb) c
Концы yprime
и отображения MATLAB:
ans = 2.0000 8.9685 4.0000 -1.0947
От посдказки MATLAB возвратите управление в отладчик путем ввода:
>> dbmex stop
Или, если вы закончены рабочий MATLAB, введите:
>> quit
Когда вы будете закончены с отладчиком, введите:
(lldb) q
Вы возвращаетесь к Терминальной подсказке.
Чтобы отладить файл MEX с JVM, сначала обработайте SIGSEGV
и сигналы процесса SIGBUS
. Запустите MATLAB и остановитесь в первой инструкции.
В Терминальной подсказке скомпилируйте файл MEX и запустите lldb отладчик.
% mex -g yprime.c % matlab -Dlldb
StartMatlab.
(lldb) process launch -s
Скажите процессу продолжаться, когда эти сигналы процесса произойдут.
(lldb) process handle -p true -n false -s false SIGSEGV SIGBUS
Можно установить точки останова и выполнить другие команды отладчика.