Отладка на платформах Mac

Используя XCode

Этот пример показывает, как отладить файл 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

LLDB является отладчиком, доступным с XCode в macOS системах. Обратитесь к документации, которой предоставляют ваш отладчик для получения дополнительной информации о его использовании.

В этой процедуре >> указывает на подсказку команды MATLAB, и % представляет подсказку Терминала Mac. Подсказкой отладчика является (lldb).

Отладка MEX без JVM

Этот пример отлаживает файл MEX yprime без Виртуальной машины Java® (JVM™). Рабочий MATLAB в этом режиме минимизирует использование памяти и улучшает начальную скорость запуска, но ограничивает функциональность. Например, вы не можете использовать рабочий стол.

  1. Скомпилируйте исходный файл MEX с опцией -g, которая создает файл с включенной отладочной информацией. В Терминальной подсказке введите:

    % mex -g yprime.c
  2. Запустите lldb отладчик с помощью функции matlab опция -D:

    % matlab -Dlldb
    
  3. Запустите MATLAB с помощью флага запуска -nojvm:

    (lldb) run -nojvm
  4. В MATLAB позвольте отладить с функцией dbmex и запустите свой файл MEX:

    >> dbmex on
    >> yprime(1,1:4)

    Отладчик захватывает пользовательский сигнал, и подсказка возвращается к lldb.

  5. Вы готовы начать отлаживать.

    Часто удобно установить точку останова в mexFunction, таким образом, вы останавливаетесь в начале стандартной программы шлюза.

    (lldb) b mexFunction
    
  6. Если вы поражаете точку останова, можно использовать любые команды отладчика, чтобы исследовать переменные, память отображения, или осмотреть регистры. Чтобы проистечь из точки останова, введите:

    (lldb) c
  7. После остановки в последней точке останова введите:

    (lldb) c

    Концы yprime и отображения MATLAB:

    ans =
    
        2.0000    8.9685    4.0000   -1.0947
    
  8. От посдказки MATLAB возвратите управление в отладчик путем ввода:

    >> dbmex stop

    Или, если вы закончены рабочий MATLAB, введите:

    >> quit
  9. Когда вы будете закончены с отладчиком, введите:

    (lldb) q

    Вы возвращаетесь к Терминальной подсказке.

Отладка MEX с JVM

Чтобы отладить файл 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
    
  • Можно установить точки останова и выполнить другие команды отладчика.

Похожие темы