-init-only-mode
)Проверяйте один только код инициализации на ошибки времени выполнения и другие проблемы
Эта опция влияет на анализ Программы автоматического доказательства Кода только.
Укажите, что Polyspace® должен проверять только раздел кода, отмеченного как код инициализации для ошибок времени выполнения и других проблем.
Чтобы указать на конец кода инициализации, вы вводите линию
#pragma polyspace_end_of_init
main
функция (только однажды). Код инициализации запускается с начала main
и продолжается до этой прагмы.Поскольку компиляторы игнорируют нераспознанные прагмы, присутствие этой прагмы не влияет на выполнение программы.
Пользовательский интерфейс (только десктопные решения): В вашей настройке проекта опция находится на узле Code Prover Verification.
Командная строка: Используйте опцию -init-only-mode
. Смотрите информацию о командной строке.
Часто, проблемы в коде инициализации могут делать недействительным анализ остающегося кода. Можно использовать эту опцию, чтобы проверять один только код инициализации и устранить проблемы, и затем отключить эту опцию, чтобы проверить остающуюся программу.
Например, в этом примере:
#include <limits.h>
int aVar;
const int aConst = INT_MAX;
int anotherVar;
int main() {
aVar = aConst + 1;
#pragma polyspace_end_of_init
anotherVar = aVar - 1;
return 0;
}
aVar = aConst+1
должен быть зафиксирован сначала перед значением aVar
используется в последующем коде.Polyspace проверяет код с начала main
и продолжает до прагмы polyspace_end_of_init
.
Polyspace проверяет законченное приложение, начинающееся с main
функция.
Можно использовать эту опцию и определять раздел кода как код инициализации только если:
Ваша программа содержит main
функционируйте и вы используете опцию Verify whole application
(неявно установите по умолчанию в командной строке).
Вы устанавливаете Source code language (-lang)
toc
.
Обратите внимание на то, что прагма должна появиться только однажды в main
функция. Прагма может появиться прежде или после объявлений переменной, но должна появиться после определений типа (typedef
S.
Вы не можете использовать эту опцию со следующими опциями:
Используйте эту опцию наряду с опцией Check that global variables are initialized after warm reboot (-check-globals-init)
полностью проверять код инициализации прежде, чем проверять остающуюся программу. Если вы используете обе опции, верификация проверяет на следующее:
Определенные или возможные ошибки времени выполнения в коде инициализации.
Ли весь non-const
глобальные переменные инициализируются вдоль всех путей к выполнению через код инициализации.
Многозадачные опции отключены, если вы проверяете код инициализации только потому, что инициализация глобальных переменных, как ожидают, произойдет, прежде чем задачи (потоки) начнутся. В результате тела задачи не проверяются.
См. также Многозадачность.
Если вы проверяете код инициализации только, анализ обрезает пути к выполнению, содержащие прагму в местоположении прагмы, но продолжает проверять другие пути к выполнению.
Например, в этом примере, pragma
появляется в if
блок. Красная неинициализированная переменная проверка появляется на линии int a = var
потому что путь, содержащий инициализацию, останавливается в местоположении прагмы. На единственном другом остающемся пути, который обходит if
блокируйтесь, переменная var
не инициализируется.
int var;
int func();
int main() {
int err = func();
if(err) {
var = 0;
#pragma polyspace_end_of_init
}
int a = var;
return 0;
}
Check that global variables are initialized after warm reboot (-check-globals-init)
.Чтобы определить инициализацию структуры, регулярный анализ Программы автоматического доказательства Кода только рассматривает поля, которые используются.
Если вы проверяете код инициализации только с помощью этой опции, анализ покрывает только фрагмент кода и не может определить, используется ли переменная вне этого фрагмента. Поэтому проверки на инициализацию рассматривают все поля структуры, или используемый или нет.
Параметр:
-init-only-mode |
Значение по умолчанию: 'off' |
Пример (Программа автоматического доказательства Кода):
Polyspace Code Prover - источники |
Пример (Сервер Программы автоматического доказательства Кода):
сервер программы автоматического доказательства полипробела кода - источники |
Check that global variables are initialized after warm reboot (-check-globals-init)
| Global variable not assigned a value in initialization code