В этом примере показано, как отлажить yprime
Файл MEX с использованием Xcode.
Копирование исходного файла MEX
The 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
папка в окне Finder в столбец навигатора в левой части окна рабочей области 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
в верхней части окна Рабочая область. Это действие может занять несколько секунд, особенно в первый раз, когда вы используете эту процедуру.
Запустите исполняемый файл MATLAB из приглашения Mac Terminal (см. Start from Terminal Window) или из Finder. Если MATLAB уже запущен, щелкните правой кнопкой значок MATLAB в Dock и выберите 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 Terminal. Приглашение отладчика (lldb)
.
Этот пример отлаживает yprime
Файл MEX без Java® Виртуальная машина (JVM™). Выполнение MATLAB в этом режиме минимизирует использование памяти и улучшает начальную скорость запуска, но ограничивает функциональность. Для примера вы не можете использовать рабочий стол.
Скомпилируйте исходный файл MEX с -g
опция, который создает файл с включенными символами отладки. В командной строке Terminal введите:
% 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
Вы вернетесь к приглашению Terminal.
Чтобы отладить файл 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
Можно задать точки пропуска и выполнить другие команды отладчика.