Можно автоматизировать анализ кода 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.
Установите опции для проверки правил MISRA C:2012. Отключите регулярный анализ Bug Finder, который ищет дефекты.
Если proj
polyspace.Project
объект, чтобы запустить анализ Bug Finder со всем обязательным MISRA C:2012 управляет, введите:
% 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