В интерактивном режиме проследите между кодом 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

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

Чтобы открыть отчет генерации кода, нажмите 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.

Смотрите также

Похожие темы