В этом примере показано, как проследить между MATLAB® исходный код и сгенерированный код C/C + +. Трассировка между исходным кодом и сгенерированным кодом помогает вам:
Поймите, как генератор кода реализовал ваш алгоритм.
Отладка проблем в сгенерированном коде.
Оцените качество сгенерированного кода.
Если у вас есть Embedded Coder® и включить производство отчета генерации кода с трассируемостью, можно просмотреть исходный код MATLAB и сгенерированный код C/C + + рядом друг с другом. Когда вы перемещаете указатель по коду, можно следовать подсвеченным трассировкам к соответствующему сгенерированному коду или исходному коду MATLAB.
Чтобы проиллюстрировать интерактивную трассируемость, этот пример создает отчет для генерации статической библиотеки на C для функции MATLAB lpsolve
который решает линейную программу:
максимизировать y = c * x
удовлетворяющее A * x < = b
где x > = 0 и b > = 0
В примере также используется тестовая функция lpsolve_test
который вызывает lpsolve
с демонстрационными входными значениями.
Копировать 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 или не выберете другой код. Чтобы изменить сторону, с которой вы отслеживаете, выберите код на другой стороне.
Исследуйте трассировку в примере отчета.
В коде MATLAB укажите на while
-цикл, который начинается с линии 38 и прокручивается вниз до всей while
-цикл находится в представлении.
Вы видите этот символ, который говорит вам, что подсвеченный код MATLAB имеет одну трассировку, которая не отображается.
Соответствующий код С отображается в отдельном окне на панели кода С
На панели кода С прокрутите вниз, пока не увидите код С, который соответствует while
цикл.
В коде MATLAB переместите указатель мыши на различные синтаксические элементы в while
цикл. Выделите переменные, выражения и блоки кода.
При наведении указателя на выражения, являющиеся частью больших выражений, различные оттенки фиолетового цвета помогают вам найти соответствующее выражение в соответствующем коде С Для примера, в линию 43, пауза над i
.
В коде MATLAB переместите указатель назад в while
-цикл, который начинается с линии 38. Когда весь цикл будет подсвечен фиолетовым цветом, выберите его щелчком мыши. Когда вы уводите указатель мыши от трассировки, желтая подсветка идентифицирует выбранную трассировку.
Чтобы удалить выбор, нажмите Esc или выберите другой код.
Когда код прослеживается до нескольких мест в соответствующем исходном или сгенерированном коде:
Если вы останавливаетесь над кодом, который вы отслеживаете, в верхней части панели кода, вы видите количество трассировок.
Если некоторые трассировки не отображаются, отображается символ, указывающий, сколько трассировок не отображается.
В области кода, если вы выбираете код, который хотите отследить, в верхней части панели кода можно выбрать трассировку, которую вы хотите увидеть.
В отчете для lpsolve
, просмотрите несколько трассировок.
Пауза над линией 36
.
В верхней части панели кода вы видите эту линию 36
имеет два следа.
Выберите 36 линии
.
В верхней части панели кода отображается расположение первого трассировки.
Чтобы отобразить все трассировки, щелкните стреле справа от них.
В отчете генерации кода для lpsolve
все трассировки из кода MATLAB переходят в один файл на C lpsolve.c
. Если код MATLAB прослеживается до нескольких файлов C, выше кода С, вы видите символ, такой, который обеспечивает количество дополнительных файлов, в которых можно найти трассировку. При клике по символу можно выбрать файл, который необходимо просмотреть. Если вы выбираете код MATLAB, то можно выбрать трассировку, которую хотите увидеть.
Точно так же над исходным кодом MATLAB символ, такой как указывает, что подсвеченный код С прослеживается до нескольких файлов MATLAB.
Чтобы просмотреть lpsolve.c
в левой части панели кода в списке сгенерированных файлов нажмите lpsolve.c
.
Чтобы просмотреть код MATLAB в левой части панели кода, щелкните функцию MATLAB, например, lpsolve
.
Когда вы не находитесь в режиме трассировки:
В коде MATLAB, если вы указываете на переменную или выражение, всплывающая подсказка предоставляет такую информацию, как тип.
В коде С ссылки переходят к другим частям кода, таким как определения типа или функции.
Когда вы находитесь в режиме трассировки, чтобы включить подсказки кода MATLAB и ссылки кода С, удерживайте Ctrl. Подсказки кода MATLAB доступны только для выбранной функции MATLAB.
В отчете для lpsolve
, просмотрите информацию о типе переменной.
На панели MATLAB Source выберите pivot
.
На панели кода удерживайте нажатой Ctrl и пауза над входным параметром i
.
Примечание
На платформе Macintosh используйте ключ Command вместо Ctrl.
Чтобы создать отчет генерации кода, который не включает трассируемость:
В coder.EmbeddedCodeConfig
объект, установите EnableTraceability
свойство к false
.
В приложении MATLAB Coder™ установите значение Enable code traceability No
.