Генерация кода доступа сообщает информацию программно

Можно экспортировать информацию о генерации кода к переменной в основной рабочей области MATLAB®. Эта переменная содержит coder.ReportInfo возразите, чьи свойства содержат эту информацию:

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

  • Объект настройки генерации кода.

  • Текст, путь и расширение входных файлов.

  • Текст, путь и расширение сгенерированных файлов.

  • Для всех функций MATLAB и методов, привлеченных в генерацию кода: имя, специализация, файл, запускает индекс и индекс конца.

  • Ошибка генерации кода, предупреждение и информационные сообщения.

  • Понимание кода, указывающее на потенциал, выходит со сгенерированным кодом.

  • Создайте журналы, произведенные во время генерации кода.

См. coder.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- 1 массив, потому что существует 25 сгенерированные файлы.

        21×1 CodeFile array with properties:
      
          Text
          Path
          Extension

    • info.Functions массив coder.Function объекты. Каждый элемент массива содержит следующую информацию о функции MATLAB или методе:

      • Имя и специализация.

      • 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. Каждый элемент массива содержит следующую информацию об одном понимании кода:

      • Идентификатор и тип сообщения.

      • Текст сообщения.

      • Категория и подкатегория, которой принадлежит сообщение.

      • 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- 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 объекты, которые содержат ошибку генерации кода, предупреждение и информационные сообщения. Каждый элемент массива содержит следующую информацию об одном сообщении:

      • Идентификатор и тип сообщения.

      • Текст сообщения.

      • coder.CodeFile объект для входного файла, который вызвал сообщение.

      • Индекс начала и конца части текста файла, который вызвал сообщение.

      В этом примере существует два сообщения об ошибке. Так, info.Messages 2- 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'.

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

| | | | | | | |

Похожие темы