Запуск анализа Polyspace при помощи скриптов MATLAB

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

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

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. См. «Интеграция Polyspace с 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.

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

Можно настроить анализ 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 объект, для отключения 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;

Однако удобнее позволить анализу завершить и захватить все ошибки компиляции из файла журнала анализа. Для получения дополнительной информации смотрите Поиск и устранение проблем с анализом Polyspace из 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.

См. также

|

Похожие темы