В этом примере показано, как отладить yprime MEX-файл с использованием 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
Выберите меню «Файл» > «Создать» > «Рабочее пространство».
В диалоговом окне выбора файла задайте имя рабочей области в поле Сохранить как: debug_yprime.
Выберите /Users/Shared/work в которой хранится рабочая область. Чтобы выбрать папку, перейдите к ней или нажмите клавиши «Command» + «Shift» + «G», чтобы переключить меню «Go to the folder:» и введите полный путь/Users/Shared/work.
Нажмите кнопку Сохранить.
Добавить yprime Файлы в рабочую область Xcode
Для добавления yprime.c в рабочую область, перетащите его из /Users/Shared/work в окне Finder в столбце навигатора в левой части окна рабочего пространства Xcode.
Снимите флажок «Назначение», Copy items into destination group's folder (if needed). Удаление этого параметра позволяет добавлять точки останова в файл, запускаемый MATLAB.
Чтобы добавить файл, нажмите кнопку Готово.
Создать схему
Выберите Продукт > Схема > Новая схема....
Оставить целевое значение равным None.
Задать для имени значение debug.
Нажмите ОК. Откроется диалоговое окно редактирования схемы.
Установите для параметра Run > Info > Executable значение Other.... В окне выбора файлов нажмите клавиши «Command» + «Shift» + «G», чтобы переключить меню «Перейти к папке:». Укажите полный путь к MATLAB_maci64 исполняемый в пакете приложений MATLAB. Пример полного пути: /Applications/MATLAB_R2016a.app/Contents/MacOS/MATLAB_maci64.
Выберите Дождаться запуска исполняемого файла.
Щелкните Закрыть (Close).
Добавить символьную точку останова
Выберите «Отладка» > «Точки останова» > «Создать символьную точку останова».
Задать для символа значение NSApplicationMain.
Чтобы добавить следующую команду отладчика, щелкните Добавить действие:
process handle -p true -n false -s false SIGSEGV SIGBUS
Если панель редактора точек останова исчезнет, щелкните правой кнопкой мыши новую точку останова и выберите Изменить точку останова... чтобы вернуться к нему
Установите флажок Автоматически продолжать после оценки действий.
Установка точек останова в файле MEX
Выберите меню «Вид» > «Навигаторы» > «Показать Диспетчер структуры проекта».
Щелкнуть yprime.c в столбце навигатора.
Щелкните желоб рядом со строкой, в которой требуется приостановить выполнение, например, в первой строке в mexFunction().
Дополнительные сведения см. в документации по Xcode.
Запустите отладчик Xcode и запустите MATLAB
Чтобы запустить отладчик, в Xcode выберите Product > Run. Либо нажмите кнопку Выполнить со значком треугольника в левом верхнем углу окна рабочего пространства.
Дождитесь отображения Xcode сообщения Waiting for MATLAB to launch в верхней части окна Рабочая область (Workspace). Это действие может занять несколько секунд, особенно при первом использовании этой процедуры.
Запустите исполняемый файл MATLAB из приглашения Mac Terminal (см. раздел Запуск из окна терминала) или из Finder. Если MATLAB уже запущен, щелкните правой кнопкой мыши значок MATLAB в док-станции и выберите Открыть дополнительный экземпляр MATLAB.
Xcode отображает сообщение Running MATLAB: debug.
Запуск двоичного файла MEX в MATLAB
В этом новом экземпляре MATLAB измените текущую папку на папку с помощью yprime и запустите файл MEX.
workdir = fullfile('/','Users','Shared','work'); cd(workdir) yprime(1,1:4)
Отладчик Xcode останавливается yprime.c в первой точке останова.
На этом этапе можно выполнить пошаговое изучение кода, проверить переменные и т. д., но в этом упражнении выберите «Продолжить» в меню «Отладка». Исполнение yprime отделка и отображение MATLAB:
ans =
2.0000 8.9685 4.0000 -1.0947
Пока этот экземпляр MATLAB продолжает работать, можно выполнять файл MEX повторно, и Xcode останавливается в заданных точках останова.
LLDB - отладчик, доступный с Xcode в системах macOS. Дополнительные сведения об использовании отладчика см. в документации отладчика.
В этой процедуре >> указывает командную строку MATLAB и % представляет запрос Mac Terminal. Запрос отладчика: (lldb).
В этом примере выполняется отладка yprime Файл MEX без виртуальной машины Java ® (JVM™). Запуск MATLAB в этом режиме минимизирует использование памяти и улучшает начальную скорость запуска, но ограничивает функциональность. Например, нельзя использовать рабочий стол.
Скомпилировать исходный файл MEX с помощью -g , который создает файл с включенными символами отладки. В приглашении «Терминал» введите:
% mex -g yprime.c
Запустите отладчик ldb с помощью 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 и остановитесь на первой инструкции.
По запросу Terminal скомпилируйте файл MEX и запустите отладчик lldb.
% mex -g yprime.c % matlab -Dlldb
Запустите MATLAB.
(lldb) process launch -s
Попросите процесс продолжить, когда появятся эти сигналы процесса.
(lldb) process handle -p true -n false -s false SIGSEGV SIGBUS
Можно задать точки разрыва и выполнить другие команды отладчика.