Можно экспортировать информацию о генерации кода в переменную в базовом MATLAB® рабочей области. Эта переменная содержит coder.ReportInfo
объект, свойства которого содержат следующую информацию:
Сводные данные генерации кода, которая включает информацию об успехе генерации кода, дате и времени, пути выходного файла, процессора, версии MATLAB Coder™, лицензиях тулбокса, извлеченных во время генерации кода, наборе инструментальных средств и строения сборки.
Объект строения генерации кода.
Текст, путь и расширение входных файлов.
Текст, путь и расширение сгенерированных файлов.
Для всех функций и методов MATLAB, участвующих в генерации кода: имя, специализация, файл, стартовый индекс и конечный индекс.
Ошибка генерации кода, предупреждение и информационные сообщения.
Понимание кода, указывающее на потенциальные проблемы с сгенерированным кодом.
Создавайте журналы, созданные во время генерации кода.
См. Кодер. Свойства ReportInfo.
Можно использовать информационный объект отчета для программного доступа к этой информации о генерации кода. Для примера можно отобразить сообщения генерации кода в командной строке MATLAB. Чтобы выполнить это действие, в скрипте сборки получите доступ к свойству, содержащему эти сообщения.
Предположим, что вы хотите экспортировать информацию отчета генерации кода в переменную info
в вашем базовом рабочем пространстве MATLAB. Выполните одно из следующих действий:
В приложении MATLAB Coder на вкладке Debugging установите Export report information to variable имя переменной info
.
В командной строке используйте codegen
команда со -reportinfo
опция. Задайте имя переменной после -reportinfo
опция.
codegen myFunction -reportinfo info
В командной строке установите свойство объекта строения кода ReportInfoVarName
в вектор символов 'info'
.
Сгенерируйте и откройте отчет генерации кода. Нажмите Export Report Information. В диалоговом окне задайте имя переменной info
.
Создайте информационный объект отчета для успешного процесса генерации кода. Просмотр свойств этого объекта.
Определите функцию MATLAB foo
:
function b = foo(a) c = svd(a,0); b = sum(c); end
Сгенерируйте MEX-функцию для foo
. Задайте входную a
как матрица переменного размера, первая размерность которой имеет верхнюю границу 3
и второе измерение имеет верхнюю границу 5
. Экспортируйте информацию отчета генерации кода в переменную info
в вашем базовом рабочем пространстве MATLAB.
codegen -config:mex foo -args {coder.typeof(ones(1,1),[3 5],[1 1])} -reportinfo info
Генератор кода производит MEX-функцию foo_mex
. Генератор кода также создает информационный объект отчета info
в базовом рабочем пространстве MATLAB.
Смотрите структуру информационного объекта отчета. Объект имеет восемь свойств, которые содержат информацию о генерации кода.
ReportInfo with properties: Summary: [1×1 coder.Summary] Config: [1×1 coder.MexCodeConfig] InputFiles: [1×1 coder.CodeFile] GeneratedFiles: [21×1 coder.CodeFile] Functions: [1×1 coder.Function] Messages: [0×1 coder.Message] CodeInsights: [1×1 coder.Message] BuildLogs: [1×1 coder.BuildLog]
Осмотрите каждое свойство info
отдельно.
info.Summary
является coder.Summary
объект, свойства которого содержат информацию об успехе генерации кода, дате и времени генерации кода, пути выходного файла, процессора, лицензий тулбокса, извлеченных во время генерации кода, и версии MATLAB Coder.
Summary with properties: Success: true Date: '08-May-2020 09:15:07' OutputFile: 'C:\coder\R2020b\License discovery\foo_mex.mexw64' Processor: 'Generic->MATLAB Host Computer' Version: 'MATLAB Coder 5.1 (R2020b)' ToolboxLicenses: [1×0 string]
Если вы генерируете автономный код, info.Summary
также содержит информацию о наборе инструментальных средств и строению сборки.
info.Config
является объектом строения кода. В этом примере, потому что вы сгенерировали MEX-функцию для foo
, это coder.MexCodeConfig
объект.
info.InputFiles
является массивом coder.CodeFile
объекты. Каждый элемент массива содержит текст, путь и расширение входного файла генерации кода. В этом примере массив имеет всего один элемент, потому что существует только один входной файл foo.m
.
CodeFile with properties: Text: 'function b = foo(a)←↵b = svd(a,0);←↵end←↵' Path: 'C:\coder\R2019a\Report Info Object\foo.m' Extension: '.m'
info.GeneratedFiles
является массивом coder.CodeFile
объекты. Каждый элемент массива содержит текст, путь и расширение сгенерированного файла. В этом примере это 21
-by- 1
массив, потому что есть 25
сгенерированные файлы.
21×1 CodeFile array with properties: Text Path Extension
info.Functions
является массивом coder.Function
объекты. Каждый элемент массива содержит следующую информацию о функции или методе MATLAB:
Имя и специализация.
The coder.CodeFile
объект для файла входа, который содержит функцию или метод. Этот объект также содержится в info.InputFiles
.
Индекс начала и конца функции или метода в тексте файла.
В этом примере info.Functions
имеет один элемент, потому что во входном файле есть только одна функция MATLAB foo.m
.
Function with properties: Name: 'foo' Specialization: 0 File: [1×1 coder.CodeFile] StartIndex: 1 EndIndex: 52
info.Messages
является массивом coder.Message
объекты, которые содержат ошибки генерации кода, предупреждения и информационные сообщения. В этом примере таких сообщений нет. Таким образом, это свойство является пустым массивом.
0×1 Message array with properties: Identifier Type Text File StartIndex EndIndex
info.CodeInsights
является массивом coder.Message
объекты, которые содержат информацию о коде. Эти сведения являются сообщениями о потенциальных проблемах в сгенерированном коде, таких как потенциальные различия от кода MATLAB и потенциальные проблемы с размещением основного массива строк. Эти сообщения также отображаются на вкладке Code Insights отчета генерации кода. Каждый элемент массива содержит следующую информацию об одном понимании кода:
Идентификатор и тип сообщения.
Текст сообщения.
Категория и подкатегория, к которой принадлежит сообщение.
The coder.File
или coder.CodeFile
объект для файла входа, который произвел сообщение.
Индекс начала и конца части текста файла, который произвел сообщение.
В этом примере существует одно понимание кода.
Message with properties: Identifier: 'Coder:potentialDifferences:autoDimIncompatibility' Type: 'Info' Text: 'In the generated code, the dimension to operate along is selected automatically, and might be different from MATLAB. Consider specifying the working dimension explicitly as a constant value.' Category: 'PotentialDifferencesFromMATLAB' File: [1×1 coder.CodeFile] StartIndex: 41 EndIndex: 46
Для индекса в текст файла используйте StartIndex
и EndIndex
свойства.
info.CodeInsights.File.Text(41:46)
'sum(c)'
info.BuildLogs
является массивом coder.BuildLog
объекты, которые содержат журналы сборки, созданные во время генерации кода. Журналы сборки содержат ошибки компиляции и связывания и предупреждения. Те же журналы сборки также появляются на вкладке Build Logs отчета генерации кода. Каждый элемент массива содержит тип и текст одного журнала сборки. В этом примере существует один журнал сборки типа 'Target'
.
Создайте информационный объект отчета для процесса генерации кода, который извлекает лицензии тулбокса. Просмотр свойств этого объекта.
Определите функцию MATLAB bar
который вызывает функции iqr
(Statistics and Machine Learning Toolbox) и haart
(Wavelet Toolbox).
function [u,v,w] = bar(x) %#codegen u = iqr(x); [v,w] = haart(x); end
Сгенерируйте исходный код C для bar
. Задайте тип входного параметра как 1
-by- 100
вектор-строка двойных чисел. Экспортируйте информацию отчета генерации кода в переменную info
в вашем базовом рабочем пространстве MATLAB.
codegen -c bar -args {zeros(1,100)} -reportinfo info
Генерация кода выполнена успешно. Осмотрите info.Summary.ToolboxLicenses
свойство.
1×2 string array "statistics_toolbox" "wavelet_toolbox"
Это свойство показывает, что лицензии Statistics and Machine Learning Toolbox™ и Wavelet Toolbox™ были взяты на изменение во время генерации кода.
Примечание
Если вы генерируете код MEX, эти лицензии снова извлекаются при загрузке MEX-функции.
Если вы генерируете статическую библиотеку или динамически связанную библиотеку, лицензии тулбокса берутся на изменение только во время генерации кода. Генератор кода не записывает проверки лицензии в сгенерированный автономный код.
Создайте информационный объект отчета для неудачного процесса генерации кода. Просмотр свойств этого объекта.
Определите функцию MATLAB foo
:
function b = foo(a) b = svd(a,0); end
Сгенерируйте MEX-функцию для foo
. Задайте входную a
как строковый скаляр. Экспортируйте информацию отчета генерации кода в переменную info
в вашем базовом рабочем пространстве MATLAB.
codegen -config:mex foo -args {"A string scalar"} -reportinfo info
Генерация кода прекращается, потому что строковый скаляр не является допустимым входом для функции MATLAB svd
. Генератор кода создает информационный объект отчета info
в базовом рабочем пространстве MATLAB.
Осмотрите info.Summary
и info.Messages
свойства.
info.Summary
указывает, что не удалось сгенерировать код.
Summary with properties: Success: false Date: '08-May-2020 10:20:35' OutputFile: 'C:\coder\R2020b\License discovery\codegen\mex\foo' Processor: 'Generic->MATLAB Host Computer' Version: 'MATLAB Coder 5.1 (R2020b)' ToolboxLicenses: [1×0 string]
info.Messages
является массивом coder.Message
объекты, которые содержат ошибки генерации кода, предупреждения и информационные сообщения. Каждый элемент массива содержит следующую информацию об одном сообщении:
Идентификатор и тип сообщения.
Текст сообщения.
The coder.CodeFile
объект для файла входа, который вызвал сообщение.
Индекс начала и конца части текста файла, вызвавшей сообщение.
В этом примере существуют два сообщений об ошибке. Итак, info.Messages
является 2
-by- 1
массив.
2×1 Message array with properties: Identifier Type Text File StartIndex EndIndex
Просмотрите первый элемент массива info.Messages(1)
.
Message with properties: Identifier: 'Coder:toolbox:unsupportedClass' Type: 'Error' Text: 'Function 'svd' is not defined for values of class 'string'.' File: [1×1 coder.CodeFile] StartIndex: 26 EndIndex: 33
StartIndex
и EndIndex
свойства для индексации в текст файла.info.Messages(1).File.Text(26:33)
'svd(a,0)'
Чтобы вручную просмотреть текст входных файлов, номера линий и столбцов, соответствующие StartIndex
и EndIndex
значения полезны. Используйте getLineColumn
функция для получения этой информации. Эта функция возвращает две структуры, которые содержат номера линий и столбцов, соответствующие StartIndex
и EndIndex
соответственно.
В предыдущем примере, чтобы вручную проверить часть foo.m
которое вызвало первое сообщение об ошибке, отобразите текст файла.
info.Messages(1).File.Text
Текст файла отображается следующим образом:
'function b = foo(a) b = svd(a,0); end '
Доступ к линии и номерам столбцов части текста, вызвавшей первое сообщение об ошибке.
[startLoc,endLoc] = getLineColumn(info.messages(1))
Выходные выходы:
startLoc = struct with fields: Line: 2 Column: 5 endLoc = struct with fields: Line: 2 Column: 12
Эти местоположения соответствуют началу и концу вызова функции 'svd(a,0)'
в тексте foo.m
.
Предположим, что вы создаете информационный объект отчета info
в Сеанс работы с MATLAB, а затем используйте его в другом Сеансе работы с MATLAB. Если info.Config
является объектом строения для генерации автономного кода (coder.CodeConfig
или coder.EmbeddedCodeConfig
) может произойти следующее поведение:
Если в хост-компьютер MATLAB для второго сеанса нет оборудования платы, указанной в info.Config.Hardware
установленное на нем свойство, параметр конфигурации info.Config.Hardware
возвращается к значению по умолчанию. Значение по умолчанию []
.
Если в хост-компьютер MATLAB для второго сеанса нет набора инструментальных средств, заданного в info.Config.Toolchain
установленное на нем свойство, параметр конфигурации info.Config.Toolchain
возвращается к значению по умолчанию. Значение по умолчанию 'Automatically locate an installed toolchain'
.
coder.BuildLog Свойства | Свойства coder.CodeFile | Файлы | coder.Function Свойства | coder.Message Свойства | coder.Method Свойства | Свойства coder.ReportInfo | coder.Summary Свойства | getLineColumn