Можно автоматизировать анализ кода 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];
Можно настроить анализ 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.Project
| polyspaceBugFinder