В этом разделе показано, как расширить шашки для инициализации для проверки аргументов функции, передаваемых указателями. По умолчанию 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 функция. Средство поиска ошибок не проверяет x для инициализации в точке вызова функции. В теле Rte_Write_int, если вы пытаетесь прочитать x, функция поиска ошибок помечает неинициализированную переменную. Однако, возможно, вы не сможете предоставить модуль, содержащий тело функции для анализа, и, возможно, захотите обнаружить, что 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.
При повторном выполнении анализа отображается неинициализированный дефект переменной на &x когда функция Rte_Write_int вызывается.
Non-initialized variable средство проверки расширено с помощью этого параметра.