Когда вы запускаете анализ Polyspace® своего кода C/C++, если одному или нескольким ваших файлов не удается скомпилировать, анализ продолжает остающиеся файлы. Можно принять решение остановить анализ ошибок компиляции.
proj = polyspace.Project; proj.Configuration.EnvironmentSettings.StopWithCompileError = true;
Однако более удобно позволить анализу завершить и получить все ошибки компиляции.
Ошибки компиляции отображены в аналитическом журнале, который появляется на командном окне MATLAB®. Аналитический журнал также содержит используемые опции и различные этапы анализа. Линии, которые указывают на ошибки, начинаются с Error:
строка. Найдите эти линии и извлеките их к файлу журнала для более легкого сканирования. Произведите предупреждение указать, что ошибки компиляции произошли.
Прежде чем вы запустите Polyspace из MATLAB, необходимо соединить Polyspace и установки MATLAB. Смотрите Интегрируют Polyspace с MATLAB и Simulink.
Функциональный runPolyspace
заданные более поздние получения выход из командного окна с помощью evalc
функция и линии хранилищ начиная с Error:
в файле error.log
. Можно вызвать runPolyspace
с путями к вашему источнику и включают папки.
Например, можно вызвать функцию с путями, чтобы продемонстрировать исходные файлы в подпапке polyspace/examples/cxx/Bug_Finder_Example/sources
из папки установки MATLAB.
sourcePath = fullfile(polyspaceroot, 'polyspace', ... 'examples', 'cxx', 'Bug_Finder_Example', 'sources'); includePath = fullfile(polyspaceroot, 'polyspace', ... 'examples', 'cxx', 'Bug_Finder_Example', 'sources'); [status, resultsSummary] = runPolyspace(sourcePath, includePath);
Функция определяется следующим образом.
function [status, resultsSummary] = runPolyspace(sourcePath, libPath) % runPolyspace takes two string arguments: source and include folder. % The files in the source folder are analyzed for defects. % If one or more files fail to compile, the errors are saved in a log. % A warning on the screen indicates that compilation errors occurred. proj = polyspace.Project; % Specify sources proj.Configuration.Sources = {fullfile(sourcePath,'*')}; % Specify compiler and paths to libraries proj.Configuration.TargetCompiler.Compiler = 'gnu4.9'; proj.Configuration.EnvironmentSettings.IncludeFolders = {fullfile(libPath,'*')}; % Run analysis runMode = 'bugFinder'; [logFileContent,status] = evalc('run(proj, runMode)'); % Open file for writing errors errorFile = fopen('error.log','wt+'); % Check log file for compilation errors numErrors = 0; log = strsplit(logFileContent,'\n'); errorLines = find(contains(log, {'Error:'}, 'IgnoreCase', true)); for ii=1:numel(errorLines) fprintf(errorFile, '%s\n', log{errorLines(ii)}); numErrors = numErrors + 1; end if numErrors warning('%d compilation error(s). See error.log for details.', numErrors); end fclose(errorFile); % Read results resObj = proj.Results; resultsSummary = getSummary(resObj, 'defects');
Аналитический журнал также получен в файле Polyspace_R20
. Вместо того, чтобы получить выход из командного окна, можно искать этот файл.##n
_ProjectName
дата
Время
журнал
Можно адаптировать этот скрипт к другим целям. Например, можно получить предупреждения в дополнение к ошибкам. Линии с предупреждениями начинаются с warning:
. Предупреждения указывают на ситуации, где анализ продолжает несмотря на проблему. Анализ делает предположение, чтобы работать вокруг проблемы. Если предположение является неправильным, вы видите ошибки позже или в редких случаях, неправильных результатах анализа.