exponenta event banner

Расширить проверки для инициализации, чтобы проверить аргументы функции, переданные указателями

В этом разделе показано, как расширить шашки для инициализации для проверки аргументов функции, передаваемых указателями. По умолчанию 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 является одной из таких функций:

  1. Перечислите функцию в 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>

  2. Укажите этот XML-файл в качестве аргумента для параметра -code-behavior-specifications.

При повторном выполнении анализа отображается неинициализированный дефект переменной на &x когда функция Rte_Write_int вызывается.

Шашки, которые можно расширить

Non-initialized variable средство проверки расширено с помощью этого параметра.

См. также

Связанные темы