В этом разделе показано, как найти возможные дефекты из определенных значений входов системы. В отличие от Кода Prover, Bug Finder не проверяет полностью на ошибки времени выполнения для всех комбинаций системных входов. Однако можно расширить некоторые шашки Bug Finder и найти, есть ли определенные системные входные значения, которые могут привести к ошибкам времени выполнения.
Сначала определите, является ли существующая проверка достаточной для ваших требований.
Для образца - шашка Bug Finder 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; }
Обратите внимание, что даже после продления шашек Bug Finder не обеспечивает звукового и исчерпывающего анализа Code Prover. Например, если Bug Finder не обнаруживает ошибки после расширения шашек, это отсутствие обнаруженных ошибок не имеет тех же гарантий, что и зеленые проверки в Code Prover.
Чтобы расширить шашку и обнаружить вышеуказанную проблему, используйте следующие опции:
Run stricter checks considering all values of system inputs (-checks-using-system-input-values)
: Включить эту опцию. Шашки, которые полагаются на числовые значения, теперь могут рассматривать все входные значения для функций с, по крайней мере, одной тележкой. Можно изменить, какие функции рассматриваются при помощи следующей опции.
Consider inputs to these functions (-system-inputs-from)
: Используйте значение custom
и введите имя функции, входы которой должны быть рассмотрены, в данном случае speed
. В командной строке используйте аргумент option custom=speed
.
Когда вы запускаете анализ Bug Finder, вы видите возможное целое деление на нуль на операции деления. Результат показывает пример входного значения функции speed
это в конечном счете приводит к дефекту тока (нулевое значение знаменателя).
Подсказки о дефекте показывают, как входное значение распространяется через код, в конечном счете приводя к одному множеству значений, которые вызывают дефект.
Следующие шашки затронуты числовыми значениями входов и могут быть расширены с помощью предыдущих опций: