exponenta event banner

Интерактивная трассировка между кодом MATLAB и сгенерированным кодом C/C + +

В этом примере показана трассировка между исходным кодом MATLAB ® и сгенерированным кодом C/C + +. Трассировка между исходным кодом и сгенерированным кодом помогает:

  • Узнайте, как генератор кода реализовал ваш алгоритм.

  • Проблемы отладки в созданном коде.

  • Оцените качество созданного кода.

Если вы используете Embedded Coder ® и разрешаете создание отчета по генерации кода с возможностью отслеживания, вы можете просматривать исходный код MATLAB и сгенерированный код C/C + + рядом друг с другом. При наведении указателя на код можно следовать выделенным трассировкам к соответствующему сгенерированному коду или исходному коду MATLAB.

Создание исходного кода MATLAB

Для иллюстрации интерактивной прослеживаемости в этом примере создается отчет для создания статической библиотеки C для функции MATLAB. lpsolve которая решает линейную программу:

  • максимизировать y = c * x

  • в зависимости от A * x < = b

  • где x > = 0 и b > = 0

 lpsolve

В примере также используется тестовая функция lpsolve_test который вызывает lpsolve с репрезентативными входными значениями.

 lpsolve_test

Копия lpsolve.m и lpsolve_test.m в доступную для записи папку.

copyfile(fullfile(docroot, 'toolbox', 'ecoder', 'examples', 'lpsolve.m'))
copyfile(fullfile(docroot, 'toolbox', 'ecoder', 'examples', 'lpsolve_test.m'))

Подготовка к созданию кода

Перед созданием кода C/C + + рекомендуется проверить код MATLAB на готовность к созданию кода.

coder.screener('lpsolve')

Отчет о готовности к созданию кода указывает, что lpsolve подходит для генерации кода.

Также рекомендуется проверять наличие проблем во время выполнения путем генерации и тестирования функции MEX.

  • Чтобы указать типы входных аргументов, передайте репрезентативные входные значения в codegen -args вариант. Кроме того, поскольку у вас есть функция тестирования, вы можете использовать coder.getArgTypes для определения типов.

  • Для генерации и тестирования функции MEX используйте -test вариант.

c = [2 3 1 1];
A = [2 3 1 -1;1 0 2 1;0 2 1 1];
b = [27;9;18];
codegen lpsolve -args {c A b} -test lpsolve_test
Running test file: 'lpsolve_test' with MEX function 'lpsolve_mex'.

x =

     5
     7
     0
     4


y =

    35

codegen успешно генерирует и выполняет функцию MEX.

Создание отчета о создании кода с отслеживаемостью

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

  • Создать coder.EmbeddedCodeConfig объект. EnableTraceability свойство управляет отслеживаемостью. По умолчанию EnableTraceability свойство - true.

  • Укажите типы входных аргументов, передав репрезентативные входные значения -args вариант.

  • Разрешить создание отчета о создании кода с помощью -report вариант.

cfg = coder.config('lib', 'ecoder', true);
codegen -config cfg lpsolve -args {c A b} -report

Режим трассировки доступа в отчете

Чтобы открыть отчет о создании кода, щелкните Просмотр отчета.

На панели кода вы видите lpsolve.m.

Чтобы включить трассировку, на вкладке Отчет щелкните Код трассировки.

Исходный код MATLAB и созданный код C отображаются рядом друг с другом.

Код трассировки

Можно выполнить трассировку из кода MATLAB в код C или из кода C в код MATLAB. Отслеживаемый код отмечен синим цветом на стороне, с которой выполняется трассировка, и оранжевым цветом на стороне, с которой выполняется трассировка. При наведении указателя на отслеживаемый код код выделяется фиолетовым цветом, и на другой стороне отображаются следы к соответствующему коду. При выборе выделенного кода щелчком по нему код становится желтым, и трассировку можно увидеть даже при удалении указателя от выделенной области. Код остается выбранным до тех пор, пока не будет нажата клавиша Esc или выбран другой код. Чтобы изменить сторону, с которой выполняется трассировка, выберите код на другой стороне.

Изучите трассировку в примере отчета.

  1. В коде MATLAB укажите while- петля, которая начинается в строке 38 и прокручивается вниз до полного while-loop находится в представлении.

    Этот символ указывает на то, что выделенный код MATLAB имеет одну трассировку, которая не отображается.

    Соответствующий код C отображается в отдельном окне на панели кода C.

  2. На панели кода C прокрутите вниз, пока не увидите код C, соответствующий while цикл.

  3. В коде MATLAB наведите указатель на различные элементы синтаксиса в while цикл. Выделите переменные, выражения и блоки кода.

    При наведении указателя на выражения, являющиеся частью выражений большего размера, различные оттенки фиолетового цвета помогают найти соответствующее выражение в соответствующем коде C. Например, в строке 43 сделайте паузу i.

  4. В коде MATLAB переместите указатель назад к while- петля, которая начинается в строке 38. Если весь цикл выделен фиолетовым цветом, выберите его щелчком мыши. При перемещении указателя за пределы трассировки выделенная трассировка выделяется желтым цветом.

    Чтобы отменить выбор, нажмите клавишу Esc или выберите другой код.

Просмотр нескольких трасс

При трассировке кода более чем в одном месте в соответствующем исходном или сгенерированном коде:

  • Если сделать паузу над отслеживаемым кодом, в верхней части панели кода отобразится количество трассировок.

  • Если некоторые трассы отсутствуют в представлении, отображается символ, указывающий, сколько трасс находится вне представления.

  • Если в области кода выбран код, который требуется отследить, в верхней части области кода можно выбрать трассировку, которую необходимо просмотреть.

В отчете для lpsolve, просмотр нескольких трасс.

  1. Пауза над линией 36.

    В верхней части панели кода вы видите эту строку 36 имеет два следа.

  2. Выбрать строку 36.

    В верхней части панели кода отображается расположение первой трассировки.

  3. Чтобы вывести список всех трасс, щелкните стрелку справа от трасс.

Просмотр трассировки для различных файлов

В отчете по созданию кода для lpsolve, все трассировки из кода MATLAB переходят в один файл C lpsolve.c. Если в коде MATLAB выполняется трассировка нескольких C-файлов, над C-кодом отображается символ, например, предоставляющий количество дополнительных файлов, в которых можно найти трассировку. Если щелкнуть символ, можно выбрать файл, который требуется просмотреть. При выборе кода MATLAB можно выбрать трассировку, которую требуется просмотреть.

Аналогично, над исходным кодом MATLAB символ, например, указывает, что выделенный код C отслеживает множество файлов MATLAB.

Переключение расположений исходного и сгенерированного кода

  1. Рассмотреть lpsolve.c в левой части панели кода в списке созданных файлов щелкните lpsolve.c.

  2. Чтобы просмотреть код MATLAB в левой части панели кода, щелкните функцию MATLAB, например: lpsolve.

Включить подсказки и ссылки для кода

Если вы не находитесь в режиме трассировки:

  • В коде MATLAB при указании на переменную или выражение в подсказке содержится такая информация, как тип.

  • В коде C ссылки переходят к другим частям кода, таким как определения типов или функций.

В режиме трассировки для включения подсказок кода MATLAB и ссылок кода C удерживайте нажатой клавишу Ctrl. Подсказки кода MATLAB доступны только для выбранной функции MATLAB.

В отчете для lpsolve, просмотр информации о типе переменной.

  1. На панели «Источник MATLAB» выберите pivot.

  2. В области кода, удерживая нажатой клавишу CTRL, сделайте паузу над входным аргументом i.

Примечание

На платформе Macintosh используйте клавишу Command вместо Ctrl.

Отключить отслеживание

Чтобы создать отчет о создании кода, который не включает отслеживание, выполните следующие действия.

  • В coder.EmbeddedCodeConfig объект, установите EnableTraceability свойство для false.

  • В приложении MATLAB Coder™ установите для параметра Включить отслеживание кода значение No.

См. также

Связанные темы