Можно автоматизировать анализ кода 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 = proj.run('bugFinder'); % Read results bfSummary = proj.Results.getSummary('defects');
См. также polyspace.Project
.
Прежде чем вы запустите Polyspace из MATLAB, необходимо соединить Polyspace и установки MATLAB. Смотрите Интегрируют Polyspace с MATLAB и Simulink.
Можно задать папку, содержащую все исходные файлы. Например:
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. Отключите регулярный анализ Средства поиска Ошибки, который ищет дефекты.
% Enable MISRA C checking proj.Configuration.CodingStandards.EnableMisraC3 = true; proj.Configuration.CodingStandards.MisraC3Subset = 'mandatory'; % Disable defect checking proj.Configuration.BugFinderAnalysis.EnableCheckers = false; % Run analysis bfStatus = proj.run('bugFinder'); % Read summary of results misraSummary = proj.Results.getSummary('misraC2012');
Вместо набора по умолчанию дефекта или кодирующий средства проверки правила, можно задать собственный набор.
Отключить MISRA C:2012 управляет 8.1 к 8,4:
% Disable rules misraRules = polyspace.CodingRulesOptions('misraC2012'); misraRules.rule_8_1 = false; misraRules.rule_8_2 = false; misraRules.rule_8_3 = false; misraRules.rule_8_4 = false; % Configure analysis proj.Configuration.CodingStandards.EnableMisraC3 = true; proj.Configuration.CodingStandards.MisraC3Subset = misraRules;
См. также polyspace.CodingRulesOptions
.
Чтобы включить дефекты Средства поиска Ошибки, используйте класс polyspace.DefectsOptions
. Одно различие между кодированием правил и классом дефектов - то, что кодирующие средства проверки правила включены по умолчанию. Вы отключаете тех, что вы не хотите. Все дефектные средства проверки отключены по умолчанию. Вы включаете тем, что вы хотите.
Если один или несколько ваших файлов содержит ошибку компиляции, анализ продолжает остающиеся файлы. Можно принять решение остановить анализ ошибок компиляции.
proj.Configuration.EnvironmentSettings.StopWithCompileError = true;
Однако более удобно позволить анализу завершить и получить все ошибки компиляции от аналитического файла журнала. Для получения дополнительной информации смотрите Анализ Polyspace Поиска и устранения неисправностей из MATLAB.
Можно запустить анализ удаленного сервера вместо локального рабочего стола. Если вы настроили связь с сервером, можно запустить анализ в пакетном режиме. Дополнительные сведения см. в продуктах Установки для Представления Анализа Polyspace с Рабочих столов на Удаленный сервер.
Укажите, что анализ должен работать на сервере. Задайте папку на своем рабочем столе, где результаты загружаются после анализа.
proj.Configuration.MergedComputingSettings.BatchBugFinder = true;
proj.Configuration.ResultsDir = fullfile(pwd,'results');
Запустите анализ, как обычно.
proj.run('bugFinder');
Откройте результаты местоположения папки результатов.
pslinkfun('openresults', '-resultsfolder', proj.Configuration.ResultsDir);
polyspace.Project
| polyspaceBugFinder