exponenta event banner

Информация о создании отчетов по коду доступа программно

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

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

  • Объект конфигурации создания кода.

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

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

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

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

  • Информация о коде, указывающая на потенциальные проблемы с сгенерированным кодом.

  • Журналы построения, созданные во время создания кода.

См. кодер. Свойства EventInfo.

Объект информации отчета можно использовать для программного доступа к этой информации о создании кода. Например, сообщения о создании кода можно просмотреть в командной строке MATLAB. Чтобы выполнить это действие, в сценарии построения перейдите к свойству, содержащему эти сообщения.

Создание информационного объекта отчета

Предположим, что требуется экспортировать информацию отчета о создании кода в переменную info в базовой рабочей области MATLAB. Выполните одно из следующих действий:

  • В приложении MATLAB Coder на вкладке Отладка установите для параметра Экспорт данных отчета значение variable to the variable name. 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.

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

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

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

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

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

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

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

  1. Определение функции MATLAB bar который вызывает функции iqr (Статистика и инструментарий машинного обучения) и haart (инструментарий вейвлета).

    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 и Machine Learning Toolbox™ и Vavelet 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'.

См. также

| | | | | | | |

Связанные темы