exponenta event banner

Распространение средств проверки поиска ошибок для стандартных библиотечных функций на пользовательские библиотеки

В этом разделе показано, как создать шашки для пользовательских библиотечных функций, сопоставив их с эквивалентными функциями из стандартной библиотеки.

Определить необходимость расширения средства проверки

Если вы идентифицируете средство поиска ошибок, которое применяется к стандартной библиотечной функции и может быть расширено на пользовательскую библиотечную функцию, используйте этот метод.

Например, можно определить математическую функцию, которая имеет тот же домен, что и математическая функция стандартной библиотеки. Если Bug Finder проверяет наличие ошибок домена при использовании функции Стандартная библиотека, можно выполнить те же проверки для эквивалентной пользовательской функции.

Предположим, что вы определяете функцию acos32 ожидаются значения в диапазоне [-1,1]. Может потребоваться определить, выходит ли аргумент функции за пределы этого диапазона во время выполнения, например, в этом фрагменте кода:

#include<math.h>
#include<float.h>

double acos32(double);
const int periodicity = 1.0;

int isItPeriodic() {
   return(abs(func(0.5) - func(0.5 + periodicity)) < DBL_MIN);
}

double func(double val) {
  return acos32(val);  
}
Один из аргументов acos32 находится вне допустимого домена. Если вы не предоставляете реализацию acos32 или если анализ acos32 реализация не точна, Bug Finder может не обнаружить проблему. Однако эта функция имеет тот же домен, что и функция «Стандартная библиотека». acos. Можно расширить средство проверки Invalid use of standard library floating point routine который обнаруживает ошибки домена при использовании acos для обнаружения одинаковых типов ошибок с помощью acos32.

Если пользовательская функция не имеет ограниченного домена, но возвращает значения в ограниченном диапазоне, ее можно сопоставить эквивалентной стандартной библиотечной функции (если она существует) для получения более точных результатов на других шашках. Например, можно отобразить функцию cos32 возвращает значения в диапазоне [-1,1] функции стандартной библиотеки cos.

Расширенная проверка

Можно расширить шашки для функций из стандартной библиотеки, сопоставив их с пользовательскими функциями библиотеки. Например, в предыдущем примере можно отобразить функцию acos32 к функции «Стандартная библиотека» acos.

Для выполнения сопоставления:

  1. Перечисление каждого сопоставления в XML-файле в определенном синтаксисе.

    Копирование файла шаблона code-behavior-specifications-template.xml из папки polyspaceroot\polyspace\verifier\cxx в доступное для записи расположение и измените файл. Введите сопоставление в файл, используя следующий синтаксис после существующих аналогичных записей:

    <function name="acos32" std="acos"> </function>
    Удалите ранее существующие записи в файле, чтобы избежать предупреждений.

  2. Укажите этот XML-файл в качестве аргумента для параметра -code-behavior-specifications.

Шашки, которые можно расширить

Таким образом можно расширить следующие шашки:

См. также

Связанные темы