В этом разделе показано, как расширить шашки для инициализации, чтобы проверить аргументы функции, переданные указателями. По умолчанию Bug Finder не проверяет эти аргументы на инициализацию в точке вызова функции, потому что вы можете выполнить инициализацию в теле функции. Однако для конкретных функций можно расширить шашки, чтобы проверить аргументы, переданные указателями для инициализации в точке вызова функции.
Предположим, что вы рассматриваете некоторые вызовы функций как часть контура системы и хотите убедиться, что вы передаете инициализированные буферы через контур. Например, окружение Run-Time или Rte_ функции в AUTOSAR позволяют программному компоненту взаимодействовать с другими программными компонентами. Можно хотеть убедиться, что аргументы указателя на эти функции указывают на инициализированные буферы.
Например, рассмотрим этот фрагмент кода:
extern void Rte_Write_int(unsigned int, int*);
void writeValueToAddress() {
const unsigned int module_id = 0xfe;
int x;
Rte_Write_int(module_id, &x);
}x передается указателем на Rte_Write_int функция. Bug Finder не проверяет x для инициализации в точке вызова функции. В теле Rte_Write_int, если вы пытаетесь прочитать xBug Finder помечает неинициализированную переменную. Однако вы, возможно, не сможете предоставить модуль, содержащий тело функции, для анализа и, возможно, захотите обнаружить это x не инициализирован в самой точке вызова функции.Можно задать, что аргументы указателя на некоторые функции должны указывать на инициализированные буферы. Например, чтобы указать, что Rte_Write_int является одной из таких функций:
Перечислите функцию в XML- файл в определенном синтаксисе.
Скопируйте файл шаблона code-behavior-specifications-template.xml из папки в доступное для записи место и измените файл. Введите функцию в файл с помощью следующего синтаксиса после существующих аналогичных записей:polyspaceroot\ polyspace\verifier\cxx
<function name="Rte_Write_int"> <check name="ARGUMENT_POINTS_TO_INITIALIZED_VALUE" arg="2"/> </function>
Rte_Write_int функция для определения, указывает ли аргумент на инициализированный буфер. Удалите ранее существующие записи в файле, чтобы избежать предупреждений.Можно также использовать подстановочный символ * для охвата группы функций. Чтобы задать все функции, начиная с Rte_Write_, введите:
<function name="Rte_Write_*"> <check name="ARGUMENT_POINTS_TO_INITIALIZED_VALUE" arg="2"/> </function>
Укажите этот XML- файл в качестве аргумента для опции -code-behavior-specifications.
Если вы перезапустите анализ, вы увидите дефект Non-initialized variable на &x когда функция Rte_Write_int вызывается.
The Non-initialized variable с помощью этой опции флажок расширен.