Эта тема показывает, как найти возможные дефекты от определенных значений системных входных параметров. В отличие от Программы автоматического доказательства Кода, Средство поиска Ошибки исчерпывающе не проверяет на ошибки времени выполнения для всех комбинаций системных входных параметров. Однако можно расширить некоторые средства проверки Средства поиска Ошибки и найти, существуют ли определенные системные входные значения, которые могут привести к ошибкам времени выполнения.
Сначала идентифицируйте, достаточно ли существующее средство проверки для ваших требований.
Например, средство проверки Средства поиска Ошибки Integer division by zero
обнаруживает, если операция деления может иметь нулевой знаменатель. Предположим, библиотечная функция имеет возможность деления на нуль после нескольких числовых операций. Например, рассмотрите функциональный 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
это в конечном счете приводит к текущему дефекту (нулевое значение знаменателя).
Следующие средства проверки затронуты численными значениями входных параметров и могут быть расширены с помощью предыдущих опций: