Анализ кода 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];
Анализ 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.Project | polyspaceCodeProver