exponenta event banner

Выполнение анализа полиспейса с помощью сценариев MATLAB

Анализ кода C/C + + можно автоматизировать с помощью сценариев MATLAB ®. В сценарии указываются исходные файлы и параметры анализа, такие как компилятор, выполняется анализ и результаты анализа считываются в таблицы MATLAB.

Например, используйте этот сценарий, чтобы выполнить анализ Finder™ ошибок Polyspace ® для примера файла :

proj = polyspace.Project

% Specify sources and includes
sourceFile = fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'sources', 'numerical.c');
includeFolder = fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'sources');

% Configure analysis
proj.Configuration.Sources = {sourceFile};
proj.Configuration.TargetCompiler.Compiler = 'gnu4.9';
proj.Configuration.EnvironmentSettings.IncludeFolders = {includeFolder};
proj.Configuration.ResultsDir = fullfile(pwd,'results');

% Run analysis
bfStatus = run(proj, 'bugFinder');

% Read results
resObj = proj.Results;
bfSummary = getSummary(resObj, 'defects');

См. также polyspace.Project.

Предпосылки

Перед запуском Polyspace из MATLAB необходимо связать установки Polyspace и MATLAB. См. раздел Интеграция полиспейса с MATLAB и Simulink.

Указать несколько исходных файлов

Можно указать папку, содержащую все исходные файлы. Например, если proj является polyspace.Project, объект, введите:

sourceFolder = fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'sources');
proj.Configuration.Sources = {fullfile(sourceFolder,'*')};
Можно также указать несколько исходных папок в массиве ячеек.

Можно указать папку, содержащую все исходные файлы как непосредственно, так и во вложенных папках. Например:

sourceFolder = fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'sources');
proj.Configuration.Sources = {fullfile(sourceFolder,'**')};

Если не требуется анализировать все файлы в папке, можно явно указать, какие файлы анализировать. Например:

sourceFolder = fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'sources');
file1 = fullfile(sourceFolder,'numerical.c');
file2 = fullfile(sourceFolder,'staticmemory.c');
proj.Configuration.Sources = {file1, file2};

Можно явно исключить файлы из анализа. Например:

% Specify source folder.
sourceFolder = fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'sources');
proj.Configuration.Sources = {fullfile(sourceFolder,'**')};

% Specify files to exclude.
file1 = fullfile(sourceFolder,'security.c');
file2 = fullfile(sourceFolder,'tainteddata.c');
proj.Configuration.InputsStubbing.DoNotGenerateResultsFor = ['custom=' file1 ...
     ',' file2];
Однако этот метод исключения не применяется к проверке ошибок во время выполнения программы Code Prover.

Проверка нарушений MISRA C:2012

Анализ Polyspace можно настроить для проверки нарушений правил MISRA C ®: 2012.

Задайте параметры для проверки правил C:2012 MISRA. Отключите обычный анализ Bug Finder, который ищет дефекты.

Если proj является polyspace.Project для выполнения анализа Bug Finder со всеми обязательными правилами C:2012 MISRA введите:

% Enable MISRA C checking
proj.Configuration.CodingRulesCodeMetrics.EnableMisraC3 = true;
proj.Configuration.CodingRulesCodeMetrics.MisraC3Subset = 'mandatory';

% Disable defect checking
proj.Configuration.BugFinderAnalysis.EnableCheckers = false;

% Run analysis
bfStatus = run(proj, 'bugFinder');

% Read summary of results
resObj = proj.Results;
misraSummary = getSummary(resObj, 'misraC2012');

Проверка на наличие определенных дефектов или нарушений правил кодирования

Вместо набора по умолчанию для проверки дефектов или правил кодирования можно указать собственный набор.

Если proj является polyspace.Project object, чтобы отключить правила MISRA C:2012 8.1-8.4, введите:

% Disable rules
misraRules = polyspace.CodingRulesOptions('misraC2012');

misraRules.Section_8_Declarations_and_definitions.rule_8_1 = false;
misraRules.Section_8_Declarations_and_definitions.rule_8_2 = false;
misraRules.Section_8_Declarations_and_definitions.rule_8_3 = false;
misraRules.Section_8_Declarations_and_definitions.rule_8_4 = false;

% Configure analysis
proj.Configuration.CodingRulesCodeMetrics.EnableMisraC3 = true;
proj.Configuration.CodingRulesCodeMetrics.MisraC3Subset = misraRules;

См. также polyspace.CodingRulesOptions.

Чтобы включить дефекты Bug Finder, используйте класс polyspace.DefectsOptions. Одно различие между правилами кодирования и классом дефектов заключается в том, что проверки правил кодирования включены по умолчанию. Отключите те, которые вам не нужны. Все проверки дефектов по умолчанию отключены. Вы включаете те, которые хотите.

Можно также указать стандартный XML-файл кодирования, который включает правила кодирования из различных стандартов. При проверке нарушений правил кодирования можно обратиться к файлу. Например, для использования XML-файла шаблона StandardsConfiguration.xml с продуктом в подпапке polyspace\examples\cxx\Bug_Finder_Example\sources, введите:

pathToTemplate = fullfile(polyspaceroot,'polyspace','examples',...
    'cxx','Bug_Finder_Example','sources','StandardsConfiguration.xml');
proj.Configuration.CodingRulesCodeMetrics.EnableMisraC3 = true;
proj.Configuration.CodingRulesCodeMetrics.MisraC3Subset = 'from-file';
proj.Configuration.CodingRulesCodeMetrics.EnableCheckersSelectionByFile = true;
proj.Configuration.CodingRulesCodeMetrics.CheckersSelectionByFile = pathToTemplate;

Найти файлы, которые не компилируются

Если один или несколько файлов содержат ошибку компиляции, анализ продолжается с оставшимися файлами. Можно остановить анализ ошибок компиляции.

Если proj является polyspace.Project , чтобы остановить анализ ошибок компиляции, введите:

proj.Configuration.EnvironmentSettings.StopWithCompileError = true;

Однако удобнее обеспечить завершение анализа и фиксацию всех ошибок компиляции из файла журнала анализа. Дополнительные сведения см. в разделе Устранение неполадок при анализе в пространстве из MATLAB.

Выполнить анализ на сервере

Анализ можно выполнить на удаленном сервере вместо локального рабочего стола. После настройки подключения к серверу можно выполнить анализ в пакетном режиме. Сведения об установке см. в разделе Установка продуктов для отправки анализа Polyspace с рабочих столов на удаленный сервер.

Укажите, что анализ должен выполняться на сервере. Укажите папку на рабочем столе, куда загружаются результаты после анализа. Если proj является polyspace.Project , чтобы настроить анализ на сервере, введите:

proj.Configuration.MergedComputingSettings.BatchBugFinder = true;
proj.Configuration.ResultsDir = fullfile(pwd,'results');

Выполните анализ, как обычно.

run(proj, 'bugFinder');

Откройте результаты из папки результатов.

pslinkfun('openresults', '-resultsfolder', proj.Configuration.ResultsDir);
Если анализ завершен и результаты загружены, они открываются в интерфейсе пользователя Polyspace.

См. также

|

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