Можно автоматизировать анализ кода 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 bfSummary = proj.Results.getSummary('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. Отключите регулярный анализ Средства поиска Ошибки, который ищет дефекты.
Если proj
polyspace.Project
объект, чтобы запустить анализ Средства поиска Ошибки со всем обязательным 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 misraSummary = proj.Results.getSummary('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
.
Чтобы включить дефекты Средства поиска Ошибки, используйте класс 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
| polyspaceCodeProver