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

Эта тема показывает, как расширить средства проверки для инициализации, чтобы проверять аргументы функции, переданные указателями. По умолчанию Средство поиска Ошибки не проверяет эти аргументы на инициализацию при вызове функции, потому что вы можете выполнить инициализацию в теле функции. Однако для определенных функций, можно расширить средства проверки, чтобы проверять аргументы, переданные указателями для инициализации при вызове функции.

Идентифицируйте потребность в существующем средстве проверки

Предположим, что вы рассматриваете некоторые вызовы функции как часть системного контура, и вы хотите убедиться, что вы передаете инициализированные буферы через контур. Например, Среда выполнения или 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.

Если вы повторно выполняете анализ, вы видите дефект Non-initialized variable на &x когда функциональный Rte_Write_int называется.

Средства проверки, которые могут быть расширены

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

Смотрите также

Похожие темы