Диагностируйте анализ Polyspace из MATLAB

Когда вы запускаете анализ Polyspace® своего кода C/C++, если одному или нескольким ваших файлов не удается скомпилировать, анализ продолжает остающиеся файлы. Можно принять решение остановить анализ ошибок компиляции.

proj = polyspace.Project;
proj.Configuration.EnvironmentSettings.StopWithCompileError = true;

Однако более удобно позволить анализу завершить и получить все ошибки компиляции.

Ошибки компиляции отображены в аналитическом журнале, который появляется на командном окне MATLAB®. Аналитический журнал также содержит используемые опции и различные этапы анализа. Строки, которые указывают на ошибки, начинаются со строки Error:. Найдите эти строки и извлеките их к файлу журнала для более легкого сканирования. Произведите предупреждение указать, что ошибки компиляции произошли.

Предпосылки

Прежде чем вы запустите Polyspace из MATLAB, необходимо соединить Polyspace и установки MATLAB. Смотрите Интегрируют Polyspace с MATLAB и Simulink.

Зафиксируйте аналитические ошибки Polyspace в журнале ошибок

Функциональный 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('proj.run(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
    resultsSummary = proj.Results.getSummary('defects');
    

Аналитический журнал также получен в файле Polyspace_R20##n_ProjectName_date-time.log. Вместо того, чтобы получить вывод из командного окна, можно искать этот файл.

Можно адаптировать этот скрипт к другим целям. Например, можно получить предупреждения в дополнение к ошибкам. Строки с предупреждениями начинаются с warning:. Предупреждения указывают на ситуации, где анализ продолжает несмотря на проблему. Анализ делает предположение, чтобы работать вокруг проблемы. Если предположение является неправильным, вы видите ошибки позже или в редких случаях, неправильных результатах анализа.

Смотрите также

Похожие темы