Эта тема показывает, как найти возможные дефекты от определенных значений системных входных параметров. В отличие от Программы автоматического доказательства Кода, Средство поиска Ошибки исчерпывающе не проверяет на ошибки времени выполнения для всех комбинаций системных входных параметров. Однако можно расширить некоторые средства проверки Средства поиска Ошибки и найти, существуют ли определенные системные входные значения, которые могут привести к ошибкам времени выполнения.
Сначала идентифицируйте, достаточно ли существующее средство проверки для ваших требований.
Например, средство проверки Средства поиска Ошибки Integer division by zero
(Polyspace Bug Finder Access) обнаруживает, если операция деления может иметь нулевой знаменатель. Предположим, библиотечная функция имеет возможность деления на нуль после нескольких числовых операций. Например, рассмотрите функциональный speed
здесь:
#include <assert.h> int speed(int k) { int i,j,v; i=2; j=k+5; while (i <10) { i++; j+=3; } v = 1 / (i-j); return v+k; }
Обратите внимание на то, что даже после расширения средств проверки, Средство поиска Ошибки не обеспечивает звуковой и исчерпывающий анализ Программы автоматического доказательства Кода. Например, если Средство поиска Ошибки не обнаруживает ошибки после расширения средств проверки, это отсутствие обнаруженных ошибок не имеет тех же гарантий как зеленые регистрации Программы автоматического доказательства Кода.
Чтобы расширить средство проверки и обнаружить вышеупомянутую проблему, используйте эти опции:
Run stricter checks considering all values of system inputs (-checks-using-system-input-values)
: Включите эту опцию. Средства проверки, которые используют численные значения, могут теперь рассмотреть все входные значения для функций по крайней мере с одним вызываемым. Можно измениться, какие функции рассматриваются со следующей опцией.
Consider inputs to these functions (-system-inputs-from)
: Используйте значение custom
и введите имя функции, входные параметры которого должны быть рассмотрены, в этом случае, speed
. В командной строке используйте аргумент custom=speed
опции.
Когда вы запускаете анализ Средства поиска Ошибки, вы видите возможное целочисленное деление на нуль на операции деления. Результат показывает пример входного значения к функциональному speed
это в конечном счете приводит к текущему дефекту (нулевое значение знаменателя).
Подсказки на дефектном показе, как входное значение распространяет через код, чтобы в конечном счете привести к одному множеству значений, которые вызывают дефект.
Следующие средства проверки затронуты численными значениями входных параметров и могут быть расширены с помощью предыдущих опций:
Array access out of bounds
(Polyspace Bug Finder Access)
Bitwise operation on negative value
(Polyspace Bug Finder Access)
Float conversion overflow
(Polyspace Bug Finder Access)
Float overflow
(Polyspace Bug Finder Access)
Float division by zero
(Polyspace Bug Finder Access)
Integer conversion overflow
(Polyspace Bug Finder Access)
Integer division by zero
(Polyspace Bug Finder Access)
Integer overflow
(Polyspace Bug Finder Access)
Invalid use of standard library floating point routine
(Polyspace Bug Finder Access)
Invalid use of standard library integer routine
(Polyspace Bug Finder Access)
Null pointer
(Polyspace Bug Finder Access)
Shift of a negative value
(Polyspace Bug Finder Access)
Shift operation overflow
(Polyspace Bug Finder Access)
Sign change integer conversion overflow
(Polyspace Bug Finder Access)
Unsigned integer conversion overflow
(Polyspace Bug Finder Access)
Unsigned integer overflow
(Polyspace Bug Finder Access)
Assertion
(Polyspace Bug Finder Access)