Интерактивная трассировка между кодом 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 объект. The EnableTraceability свойство контролирует трассируемость. По умолчанию в EnableTraceability свойство true.

  • Задайте типы входных параметров путем передачи репрезентативных входных значений в -args опция.

  • Включите подготовку отчета генерации кода при помощи -report опция.

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

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

Чтобы открыть отчет генерации кода, нажмите View report.

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

Чтобы включить трассировку, на вкладке Report нажмите Trace Code.

Вы видите исходный код MATLAB и сгенерированный код C рядом друг с другом.

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

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

Исследуйте трассировку в примере отчета.

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

    Вы видите этот символ, который говорит вам, что подсвеченный код MATLAB имеет одну трассировку, которая не отображается.

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

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

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

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

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

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

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

Когда код прослеживается до нескольких мест в соответствующем исходном или сгенерированном коде:

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

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

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

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

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

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

  2. Выберите 36 линии.

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

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

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

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

Точно так же над исходным кодом MATLAB символ, такой как указывает, что подсвеченный код С прослеживается до нескольких файлов MATLAB.

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

  1. Чтобы просмотреть lpsolve.c в левой части панели кода в списке сгенерированных файлов нажмите lpsolve.c.

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

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

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

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

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

Когда вы находитесь в режиме трассировки, чтобы включить подсказки кода MATLAB и ссылки кода С, удерживайте Ctrl. Подсказки кода MATLAB доступны только для выбранной функции MATLAB.

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

  1. На панели MATLAB Source выберите pivot.

  2. На панели кода удерживайте нажатой Ctrl и пауза над входным параметром i.

Примечание

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

Отключение трассируемости

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

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

  • В приложении MATLAB Coder™ установите значение Enable code traceability No.

См. также

Похожие темы