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

Можно экспортировать информацию о генерации кода к переменной в основной рабочей области 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: '12-Apr-2019 17:36:35'
          OutputFile: 'C:\coder\R2019b\ReportInfo Object\foo_mex.mexw64'
           Processor: 'Generic->MATLAB Host Computer'
             Version: 'MATLAB Coder 4.2 (R2019b)'

      Если вы генерируете автономный код, 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 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. Смотрите структуру информационного объекта отчета. Объект имеет восемь свойств, которые содержат информацию о генерации кода.

      ReportInfo with properties:
    
               Summary: [1×1 coder.Summary]
                Config: [1×1 coder.MexCodeConfig]
            InputFiles: [1×1 coder.CodeFile]
        GeneratedFiles: [0×0 coder.File]
             Functions: [1×1 coder.Function]
              Messages: [2×1 coder.Message]
          CodeInsights: [0×1 coder.Message]
             BuildLogs: [0×0 coder.BuildLog]
  3. Смотрите info.Summary и info.Messages свойства.

    • info.Summary указывает, что генерация кода перестала работать.

        Summary with properties:
      
             Success: false
                Date: '15-Apr-2019 12:12:12'
          OutputFile: 'C:\coder\R2019b\ReportInfo Object\codegen\mex\foo'
           Processor: 'Generic->MATLAB Host Computer'
             Version: 'MATLAB Coder 4.2 (R2019b)'
    • 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'.

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

| | | | | | | |

Похожие темы