Диагностируйте компиляцию и соединение ошибок

Запустите верификацию Polyspace® на коде, который создает успешно с вашим компилятором. Если ваш код создает успешно, настройте проект Polyspace одним из этих способов:

  • Проследите свою систему сборки с polyspace-configure команда.

    Программное обеспечение создает файл опций из ваших скриптов сборки. Это устанавливает соответствующие аналитические опции Polyspace эмулировать ваши опции сборки.

  • Если вы не можете проследить свою систему сборки, создайте файл опций Polyspace вручную.

    Добавьте свои источники, и включает в проект. Измените аналитические опции по умолчанию при необходимости.

Для получения дополнительной информации смотрите, Готовят Скрипты к Анализу Polyspace.

Следующая проблема происходит чаще, если вы вручную настраиваете свой проект.

Проблема

Перед верификацией и обнаружением ошибок времени выполнения, Polyspace компилирует ваш код и обнаруживает компиляцию и соединение ошибок. Даже если ваш код создает успешно с вашим компилятором, вы можете все еще получить ошибки компиляции с Polyspace.

Возможная причина: отклонения от стандарта ANSI C99

Компилятор Polyspace строго следует Стандарту ANSI® C99 (ISO/IEC 9899:1999). Если ваш компилятор позволяет отклонение от Стандарта, компиляция Polyspace, которая использует опции по умолчанию, не может эмулировать ваш компилятор. Например, ваш компилятор может позволить определенные ключевые слова не-ANSI, которые Polyspace не распознает по умолчанию.

Чтобы гарантировать отсутствие определенных ошибок времени выполнения, компиляция Polyspace по умолчанию строго следует стандарту. Определенные компиляторы позволяют определенные отклонения от этого стандарта и следуют за внутренними алгоритмами, чтобы скомпилировать ваш код. Без явно заданных знаний вашего поведения компилятора Polyspace не может разместить те отклонения. Размещение этих отклонений через некоторые произвольные внутренние алгоритмы может поставить под угрозу результаты окончательного анализа, если алгоритм Polyspace не совпадает с алгоритмом вашего компилятора.

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

Решение

Измените аналитические опции, чтобы эмулировать ваш компилятор более тесно. Чтобы закончить проблемы компиляции, используйте эти опции.

ОпцияЦель
Целевые и Параметры компилятора

Используя эти предопределенные опции, можно задать поведение компилятора непосредственно и работать вокруг известных отклонений от стандарта.

Часто, установка Compiler (-compiler) соответственно достаточно, чтобы эмулировать ваш компилятор.

Используя эти опции, можно иногда работать вокруг неизвестных отклонений от стандарта.

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

Для определенных типов ошибок компиляции смотрите Ошибки компиляции Поиска и устранения неисправностей.

Если вы не можете решить свою ошибку компиляции, свяжитесь с MathWorks® Technical Support и обеспечьте ваше имя компилятора для лучшей поддержки. Смотрите Техническую поддержку Контакта О Проблемах с Рабочим Polyspace.

Возможная причина: соединение ошибок

Даже если одна единица компиляции компилирует успешно, вы получаете соединяющуюся ошибку из-за несоответствия между двумя единицами компиляции. Например, вы задаете ту же функцию в двух .c файлы с различным аргументом или возвращают типы.

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

Решение

Зафиксируйте соединяющиеся ошибки, которые обнаруживает Polyspace. Даже если ваш процесс сборки позволяет эти ошибки, у вас могут быть неожиданные результаты в течение времени выполнения. Например, если два функциональных определения с тем же именем, но конфликтными прототипами существуют в вашем коде, когда вы вызываете функцию, результат может быть неожиданным.

Когда соединяющаяся ошибка происходит, сообщение об ошибке показывает местоположение в вашем файле, где компиляция Polyspace перестала работать. Предыдущие предупреждающие сообщения показывают местоположение конфликтов, которые приводят к соединяющейся ошибке. Используя номера строки в тех сообщениях (или путем нажатия на сообщения, если вы запускаете анализ от пользовательского интерфейса), можно перейти к местоположению конфликтов в коде.

Для определенных типов соединения ошибок смотрите Ошибки компиляции Поиска и устранения неисправностей.

Возможная причина: конфликты с тупиками функции Polyspace

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

Ошибка подразумевает, что Polyspace нашел redeclaration, но не может найти тело вашей переопределенной библиотечной функции. Верификация продолжает использовать реализацию Polyspace функции, но обеспечивает предупреждение. Если ваша переопределенная функция имеет различную подпись от нормальной подписи функции, остановок верификации с ошибкой.

Предупреждения и ошибки этого типа часто отсылают к файлу __polyspace__stdstubs.c. Этот файл содержит прототипы для реализации Polyspace стандартных библиотечных функций. Файл расположен в polyspaceroot\polyspace\verifier\cxx\polyspace_stubs\. polyspaceroot папка установки Polyspace.

Решение

Если вы знаете местоположение файла, который содержит тело вашей переопределенной стандартной библиотечной функции, добавьте файл в свою верификацию. Для получения дополнительной информации смотрите Ошибки от Конфликтов с Заголовочными файлами Polyspace.

Если вы не имеете тело функции в наличии:

  • Если вы видите предупреждение этого типа, можно проигнорировать предупреждение. Результаты верификации основаны на реализациях Polyspace стандартных библиотечных функций. Если ваше переопределение компилятора тесно совпадает со стандартными техническими требованиями библиотечной функции, результаты верификации все еще применимы для кода, скомпилированного с вашим компилятором.

  • Если вы видите ошибку:

    1. Задайте макрос __ polyspace_no_function_name в вашем проекте. Например, если ошибка происходит из-за конфликта с определением sprintf функционируйте, задайте макро-__polyspace_no_sprintf. Для получения информации о том, как задать макросы, смотрите Preprocessor definitions (-D).

      Макрос отключает использование реализаций Polyspace стандартной библиотечной функции. Программное обеспечение блокирует стандартную библиотечную функцию как любая другая неопределенная функция. У вас нет ошибки из-за несоответствия подписи с реализациями Polyspace.

    2. Свяжитесь с MathWorks Technical Support и предоставьте информацию о вашем компиляторе.

Для некоторых стандартных библиотечных функций, таких как assert, и выделение памяти функционирует, такие как malloc и calloc, Polyspace продолжает использовать свои собственные реализации, даже если вы переопределяете функцию и обеспечиваете тело функции. Для получения дополнительной информации смотрите Ошибки от Функций Утверждения или Выделения памяти.