Запустите верификацию Polyspace® на коде, который создает успешно с вашим компилятором. Если ваш код создает успешно, настройте проект Polyspace одним из этих способов:
Проследите свою систему сборки.
Программное обеспечение создает проект из ваших скриптов сборки. Это устанавливает соответствующие аналитические опции Polyspace эмулировать ваши опции сборки.
Если вы не можете проследить свою систему сборки, создайте проект Polyspace вручную.
Добавьте свои источники, и включает в проект. Измените аналитические опции по умолчанию при необходимости.
Для получения дополнительной информации смотрите, Конфигурируют и Анализ Выполнения.
Следующая проблема происходит чаще, если вы вручную настраиваете свой проект.
Перед верификацией и обнаружением ошибок времени выполнения, Polyspace компилирует ваш код и обнаруживает компиляцию и соединение ошибок. Даже если ваш код создает успешно с вашим компилятором, вы все еще получаете ошибки компиляции с Polyspace.
Фаза компиляции
Отказ компиляции
Компилятор Polyspace строго следует Стандарту ANSI® C99 (ISO/IEC 9899:1999). Если ваш компилятор позволяет отклонение от Стандарта, компиляция Polyspace, которая использует опции по умолчанию, не может эмулировать ваш компилятор. Например, ваш компилятор может позволить определенные ключевые слова не-ANSI, которые Polyspace не распознает по умолчанию.
Чтобы гарантировать отсутствие определенных ошибок времени выполнения, компиляция Polyspace по умолчанию строго следует стандарту. Определенные компиляторы позволяют определенные отклонения от этого стандарта и следуют за внутренними алгоритмами, чтобы скомпилировать ваш код. Без явно заданных знаний вашего поведения компилятора Polyspace не может разместить те отклонения. Размещение этих отклонений через некоторые произвольные внутренние алгоритмы может поставить под угрозу результаты окончательного анализа, если алгоритм Polyspace не совпадает с алгоритмом вашего компилятора.
Проверяйте сообщение об ошибке, которое вызвало отказ компиляции, и смотрите, можно ли идентифицировать некоторое отклонение от стандарта. Сообщение об ошибке показывает номер строки, который вызвал отказ компиляции. Если при запуске верификацию от пользовательского интерфейса, можно кликнуть по сообщению об ошибке и перейти к соответствующей строке кода.
Измените аналитические опции, чтобы эмулировать ваш компилятор более тесно.
Если вы включаете Compilation Assistant и верификацию выполнения в пользовательском интерфейсе для большинства ошибок компиляции, вы получаете предположения в панели Output Summary, что можно применяться в один клик. Информация об Ошибке Вида на море, Когда Аналитические Остановки.
В противном случае можно вручную настроить аналитические опции. Чтобы закончить проблемы компиляции, используйте эти опции.
Опция | Цель |
---|---|
Целевые и Параметры компилятора | Используя эти предопределенные опции, можно задать поведение компилятора непосредственно и работать вокруг известных отклонений от стандарта. Часто, установки |
Используя эти опции, можно иногда работать вокруг неизвестных отклонений от стандарта. Например, можно использовать эти опции, чтобы заменить нераспознанные ключевые слова из предварительно обработанного кода с близким соответствием с распознанными ключевыми словами или удалить их полностью. Поскольку вы не изменяете свой исходный код, опции позволяют вам работать вокруг ошибок компиляции при сохранении исходного кода в целости. |
Для определенных типов ошибок компиляции смотрите Ошибки компиляции Поиска и устранения неисправностей.
Если вы не можете решить свою ошибку компиляции, свяжитесь с MathWorks® Technical Support и обеспечьте ваше имя компилятора для лучшей поддержки. Смотрите Техническую поддержку Контакта.
Даже если одна единица компиляции компилирует успешно, вы получаете соединяющуюся ошибку из-за несоответствия между двумя единицами компиляции. Например, вы задаете ту же функцию в двух файлах .c
с различным аргументом или возвращаете типы.
Общие наборы инструментальных средств компиляции не хранят информацию о прототипах функции во время процесса соединения. Поэтому несмотря на эти типы соединения ошибок, сборка не перестала работать. Чтобы гарантировать отсутствие определенных ошибок времени выполнения, Polyspace не продолжает анализ, когда такие ошибки соединения происходят.
Зафиксируйте соединяющиеся ошибки, которые обнаруживает Polyspace. Даже если ваш процесс сборки позволяет эти ошибки, у вас могут быть неожиданные результаты в течение времени выполнения. Например, если два функциональных определения с тем же именем, но конфликтными прототипами существуют в вашем коде, когда вы вызываете функцию, результат может быть неожиданным.
Когда соединяющаяся ошибка происходит, сообщение об ошибке показывает местоположение в вашем файле, где компиляция Polyspace перестала работать. Предыдущие предупреждающие сообщения показывают местоположение конфликтов, которые приводят к соединяющейся ошибке. Используя номера строки в тех сообщениях (или путем нажатия на сообщения, если вы запускаете анализ от пользовательского интерфейса), можно перейти к местоположению конфликтов в коде.
Например, в этих сообщениях, компиляция перестала работать из-за конфликтных функциональных типов возврата. Отказ происходит на строке 5 в file2.c
, когда функция вызвана. Предыдущие предупреждающие сообщения для строки 1 в file1.c
и строке 1 в file2.c
показывают местоположения, где конфликты происходят.
Для определенных типов соединения ошибок смотрите Ошибки компиляции Поиска и устранения неисправностей.
Polyspace использует свою собственную реализацию стандартных библиотечных функций для более эффективной верификации. Если ваш компилятор повторно объявляет и переопределяет стандартную библиотечную функцию, можно получить предупреждение или ошибку, когда вы вызываете функцию.
Ошибка подразумевает, что Polyspace нашел redeclaration, но не может найти тело вашей переопределенной библиотечной функции. Верификация продолжает использовать реализацию Polyspace функции, но обеспечивает предупреждение. Если ваша переопределенная функция имеет различную подпись от нормальной подписи функции, остановок верификации с ошибкой.
Предупреждения и ошибки этого типа часто отсылают к файлу __polyspace__stdstubs.c
. Этот файл содержит прототипы для реализации Polyspace стандартных библиотечных функций. Файл расположен в
. polyspaceroot\polyspace\verifier\cxx\polyspace_stubs\
является папкой установки Polyspace.polyspaceroot
Если вы знаете местоположение файла, который содержит тело вашей переопределенной стандартной библиотечной функции, добавьте файл в свою верификацию. Для получения дополнительной информации смотрите Ошибки от Конфликтов с Заголовочными файлами Polyspace.
Если вы не имеете тело функции в наличии:
Если вы видите предупреждение этого типа, можно проигнорировать предупреждение. Результаты верификации основаны на реализациях Polyspace стандартных библиотечных функций. Если ваше переопределение компилятора тесно совпадает со стандартными спецификациями библиотечной функции, результаты верификации все еще применимы для кода, скомпилированного с вашим компилятором.
Если вы видите ошибку:
Задайте макро-
в своем проекте. Например, если ошибка происходит из-за конфликта с определением функции __polyspace_no_function_name
sprintf
, задайте макро-__polyspace_no_sprintf
. Для получения информации о том, как задать макросы, смотрите Preprocessor definitions (-D)
.
Макрос отключает использование реализаций Polyspace стандартной библиотечной функции. Программное обеспечение блокирует стандартную библиотечную функцию как любая другая неопределенная функция. У вас нет ошибки из-за несоответствия подписи с реализациями Polyspace.
Свяжитесь с MathWorks Technical Support и предоставьте информацию о вашем компиляторе.
Для некоторых стандартных библиотечных функций, таких как assert
и функции выделения памяти, такие как malloc
и calloc
, Polyspace продолжает использовать свои собственные реализации, даже если вы переопределяете функцию и обеспечиваете тело функции. Для получения дополнительной информации смотрите Ошибки от Функций Утверждения или Выделения памяти.