Программный доступ к информации о генерации кода

Можно экспортировать информацию о генерации кода в переменную в базовом 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.

Пример: Создайте информационный объект отчета для успешной генерации кода

Создайте информационный объект отчета для успешного процесса генерации кода. Просмотр свойств этого объекта.

  1. Определите функцию 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.

  2. Смотрите структуру информационного объекта отчета. Объект имеет восемь свойств, которые содержат информацию о генерации кода.

      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]
  3. Осмотрите каждое свойство 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'.

Пример: Создайте информационный объект отчета для успешной генерации кода, который извлекает лицензии тулбокса

Создайте информационный объект отчета для процесса генерации кода, который извлекает лицензии тулбокса. Просмотр свойств этого объекта.

  1. Определите функцию 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
    
  2. Генерация кода выполнена успешно. Осмотрите info.Summary.ToolboxLicenses свойство.

      1×2 string array
    
        "statistics_toolbox"    "wavelet_toolbox"
    

    Это свойство показывает, что лицензии Statistics and Machine Learning Toolbox™ и Wavelet Toolbox™ были взяты на изменение во время генерации кода.

    Примечание

    Если вы генерируете код MEX, эти лицензии снова извлекаются при загрузке MEX-функции.

    Если вы генерируете статическую библиотеку или динамически связанную библиотеку, лицензии тулбокса берутся на изменение только во время генерации кода. Генератор кода не записывает проверки лицензии в сгенерированный автономный код.

Пример: Создайте информационный объект отчета для неудачной Генерации кода

Создайте информационный объект отчета для неудачного процесса генерации кода. Просмотр свойств этого объекта.

  1. Определите функцию 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.

  2. Осмотрите 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.

Перенос объектов строения кода в новый сеанс работы с MATLAB

Предположим, что вы создаете информационный объект отчета 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'.

См. также

| | | | | | | |

Похожие темы