Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
Установка PC-Lint и его использование в…

Установка PC-Lint и его использование в Visual Studio 2005

05 Дек 2006

Статья посвящена первому знакомству со статическим анализатором Си++-кода PC-Lint версии 8.0. Описан процесс установки инструмента и его первоначальной настройки.

Введение

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

Среди инструментов, помогающих в тестировании и улучшении программного кода, можно выделить несколько классов.

К первому классу можно отнести системы, автоматизирующие юнит-тестирование. В качестве примера можно привести такие известные программные продукты, как AutomatedQA TestComplete (http://www.automatedqa.com) или Parasoft Jtest (http://www.parasoft.com). Данная методология тестирования с большим успехом применяется во многих компаниях и незаменима в случае работы над динамично развивающимся программным продуктом.

Другое направление - сокращение издержек на этапе тестирования ПО, за счёт выявления областей ПО затронутых изменениями. Это позволяет значительно сократить объёмы ручного тестирования и выделить модифицированные участки для более тщательной проверки. Такой подход поддерживает высокое качество тестирования при меньших временных затратах. Представителем такого класса инструментов является Testing Relief.

При отладке больших приложений хорошо зарекомендовали себя динамические анализаторы. К ним можно отнести Valgrind (http://valgrind.org), Compuware BoundsChecker (http://www.compuware.com/).

Широкий спектр задач по повышению качества программного кода решают статические анализаторы, как общего назначения, так и специализированного. К первым можно отнести, например, продукцию компании Coverity Incorporated (http://www.coverity.com) или Gimpel Software PC-Lint (http://www.gimpel.com), который мы рассмотрим подробнее. К специализированным статическим анализаторам можно отнести инструмент Viva64 (http://www.viva64.com), предназначенный для диагностики ошибок в 64-битном коде.

В этой статье рассмотрены первые шаги по осваиванию статического анализатора Gimpel Software PC-Lint версии 8.0. Это связано с его популярностью и заинтересованностью разработчиков программного обеспечения в использовании подобных статических анализаторов. Использование статических анализаторов кода давно стало культурой в крупных компаниях и интерес к подобным инструментам непрерывно растет.

1. Установка PC-Lint

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

Данная статья по установке и настройки PC-lint будет представлять собой наглядное руководство, состоящее из рисунков, демонстрирующих последовательные шаги и пояснительного текста к ним.

a0033_PC-lint_ru/image1.png

Рисунок 1. Запускаем инсталлятор.

a0033_PC-lint_ru/image2.png

Рисунок 2. Листаем первые страницы мастера установки.

a0033_PC-lint_ru/image3.png

Рисунок 3. Соглашаемся с лицензионным соглашением.

a0033_PC-lint_ru/image4.png

Рисунок 4. Вводим свое имя и название организации.

a0033_PC-lint_ru/image5.png

Рисунок 5. Выбираем папку для установки. Поскольку вам придется часто работать с папкой, где установлен PC-lint, чтобы поправить конфигурационный файл или почитать документацию, не рекомендуем устанавливать его в папку с большим уровнем вложенности. С другой стороны, после установки Вы можете настроить ссылки на интересующие вас файлы, и тогда место установки не имеет значение. Мы соглашаемся на установку в корневой каталог диска C.

a0033_PC-lint_ru/image6.png

Рисунок 6. Продолжаем процесс установки.

a0033_PC-lint_ru/image7.png

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

a0033_PC-lint_ru/image8.png

Рисунок 8. Теперь время заварить кофе и приготовиться к настройкам вашего нового инструментария.

a0033_PC-lint_ru/image9.png

Рисунок 9. PC-lint допускает автономное использование в пакетном режиме. Но, на наш взгляд, более удобным представляется его интерактивное использования из среды Visual Studio. Описание процесса интеграции PC-lint в среду можно почерпнуть из файла env-vc7.lnt. Этот файл содержит информацию об интеграции в Visual Studio 2003, но разница по сравнению с интеграцией в Visual Studio 2005 совсем незначительна. Вы можете не обращаться к этому файлу, а воспользоваться для настройки нашим документом, в который уже внесены необходимые поправки касательно Visual Studio 2005.

2. Первоначальная настройка

a0033_PC-lint_ru/image10.png

Рисунок 10. Выбираем расположение конфигурационного файла, который сейчас создаст мастер настройки. Мы рекомендуем расположить его там же, где установлен PC-lint, чтобы все файлы, которые относятся к этой утилите, находились в одном месте. В противном случае Вам придется чуть больше повозиться с настройкой путей к разным файлам. Вы также можете использовать уже существующий файл конфигурации. Выберем создание нового файла конфигурации.

a0033_PC-lint_ru/image11.png

Рисунок 11. Выбираем наиболее подходящий конфигурационный файл для нашего компилятора. К сожалению, мы не найдем в списке Visual C++ 2005, поэтому остановим свой выбор на Visual C++ 2003. В дальнейшем мы вручную скорректируем сгенерированный мастером настроек конфигурационный файл "STD.LNT".

a0033_PC-lint_ru/image12.png

Рисунок 12. Выбираем интересующую нас модель данных.

a0033_PC-lint_ru/image13.png

Рисунок 13. Скорее всего, Вам понадобится поддержка библиотек MFC, STL и Win32API, так что подключаем соответствующие конфигурационные файлы. Эта настройка выполняет очень важное действие: копирует необходимые для работы LNT файлы из каталога "C:\Lint\lnt" в каталог "C:\Lint". Иначе Вам будет необходимо выполнить это копирование вручную. В каталоге "C:\Lint\lnt" эти файлы не обнаруживаются, даже если путь к ним прописать в переменной окружения PATH.

a0033_PC-lint_ru/image14.png

Рисунок 14. Что выбрать из списка различных наборов правил по проверке кода, решать Вам. Можете пока ничего не выбирать, а потом вручную (или этим же мастером настроек) добавлять или убирать различные наборы, анализируя затем результат проверки на ваших программах.

a0033_PC-lint_ru/image15.png

Рисунок 15. Если вы используете в своей программе не только стандартные заголовочные файлы, но и сторонние библиотеки (например, Mesa), то вам понадобится прописать соответствующие пути.

a0033_PC-lint_ru/image16.png

Рисунок 16. Прописываем пути к необходимым заголовочным файлам. Настойчиво рекомендуется это сделать, в противном случае PC-lint будет просто останавливаться на строках #include "unknown.h".

a0033_PC-lint_ru/image17.png

Рисунок 17. Все, создание заготовки конфигурационного файла завершено!

a0033_PC-lint_ru/image18.png

Рисунок 18. Теперь мы можем, используя его как образец, сделать нужные нам конфигурационные файлы. Других конфигураций создавать не будем, поэтому выберем "No".

a0033_PC-lint_ru/image19.png

Рисунок 19. Мы можем также провести некоторые дополнительные настройки по поведению PC-lint. Сейчас мы пройдем этот этап, чтобы в дальнейшем продемонстрировать связь этих настроек с содержимым конфигурационного файла "options.lnt".

a0033_PC-lint_ru/image20.png

Рисунок 20. Не будем подробно останавливаться на следующих настройках. Вам самим придется выбрать, что считать подозрительным кодом, а что нет. Но отметим, что мы выбрали не считать подозрительной следующую конструкцию:

if ( (a = b) ) {
   ...
}
a0033_PC-lint_ru/image21.png

Рисунок 21. Выбираем наиболее подходящие настройки для нашей среды. Выбор "env-vc7.lnt" никак не отражается на генерируемых конфигурационных файлах. Смысл этой настройки непонятен. Возможно, существует ошибка в мастере конфигурации. Позже мы добавим "env-vc7.lnt" в конфигурацию самостоятельно.

a0033_PC-lint_ru/image22.png

Рисунок 22. Поскольку мы не собираемся использовать PC-lint в пакетном режиме, мы можем пропустить данный шаг конфигурирования.

a0033_PC-lint_ru/image23.png

Рисунок 23. Установка утилиты завершена полностью! Теперь можно приступить к окончательной настройке и интеграции в Visual Studio 2005.

В начале, нам надо отправиться на сайт http://www.gimpel.com и скачать новые обновления для PC-lint и новые конфигурационные файлы. Так как мы используем версию 8.00, то скачиваем для нее обновления со страницы http://www.gimpel.com/html/ptch80.htm.

Если у вас отсутствует файл "co-msc80.lnt", то скачайте его. Он представляет собой конфигурационный файл для работы в Visual Studio 2005. В любом случае он должен находиться в папке "C:\Lint" (см. также рисунок 10).

Также посмотрите другие обновления и действуйте по своему усмотрению.

Теперь мы готовы приступить к доработке конфигурационных файлов. Вначале посмотрим на те файлы, что были сгенерированы при установке утилиты PC­lint. Это файлы "options.lnt" и "std.lnt". Начнем с файла "options.lnt". У нас он выглядит следующим образом:

// Please note -- this is a representative set of error suppression

// options. Please adjust to suit your own policies

// See manual (chapter LIVING WITH LINT)

// for further details.

-e820 // allow test of parenthesized assignment

В этом файле мастер настройки сохранил ваши пожелания по анализу некоторых конструкций (см. рисунок 15). Помните, мы решили считать конструкцию вида:

if ( (a = b) ) {
   ...
}

верной? Результат этого решения отразился в файле "options.lnt", как строчка

-e820 // allow test of parenthesized assignment

которая указывает считать указанные конструкции безопасными.

Файл "options.lnt" включается в "std.lnt". Идеология включения одного конфигурационного файла PC-lint в другой, такая же, как и идеология использования директивы "#include" в языках С/С++.

Теперь посмотрим на файл "std.lnt":

// Microsoft Visual C++ .NET 2003,

// -si4 -sl4 -sp8, lib-mfc.lnt lib-stl.lnt lib-w32.lnt

// Standard lint options

co-msc71.lnt

lib-mfc.lnt lib-stl.lnt lib-w32.lnt

options.lnt -si4 -sl4 -sp8

-iD:\ASRC\fox-lib\fox-1.4.4\include

-iD:\ASRC\Libraries\mesa\include

Строчка "co-msc71.lnt" включает (аналогия #include в С/С++) в наш основной конфигурационный файл настройки для компилятора Visual C++ 2003. Сразу измените эту строчку на "co-msc80.lnt".

Строку "lib-mfc.lnt lib-stl.lnt lib-w32.lnt" можно оставить без изменений.

Добавляем "env-vc7.lnt". У нас нет файла "env-vc8.lnt", но и с "env-vc7.lnt" все будет замечательно работать. В документации к PC-Lint предлагается не включать "env-vc7.lnt" в ваши файлы конфигурации, а использовать это как один из параметров при вызове из среды MSVC. Но на наш взгляд проще, чтобы все настройки находились в одном месте. Все равно "std.lnt" уже заточен на работу со средой Visual Studio. И когда, например, появится "env-vc8.lnt", проще поправить в одном месте (в "std.lnt"), чем править несколько команд в среде Visual Studio, вызывающих PC-lint.

Строчка "options.lnt -si4 -sl4 -sp8" кажется сложной, но на самом деле в ней находятся четыре простых и независимых ключа настройки. Первый включает в "std.lnt" файл "options.lnt". А остальные служат для задания размерности типов. За подробностями следует обратиться к документации, входящей в комплект PC-lint.

Идея использования включаемых файлов очень удобна. Так можно собрать отдельно настройки путей к заголовочным файлам или включение/выключение ряда предупреждений. А потом собирать конечные конфигурационные файлы из них, как из кирпичиков. Мы думаем, вы легко с этим разберетесь, а пока, для простоты, избавимся от файла "options.lnt", перенеся его содержимое в "std.lnt".

Добавим в конфигурации еще и уровень предупреждений, задающийся ключиком -w##.

После внесенных исправлений файл "std.lnt" выглядит следующим образом:

-iD:\ASRC\fox-lib\fox-1.4.4\include

-iD:\ASRC\Libraries\mesa\include

co-msc80.lnt

env-vc7.lnt

lib-mfc.lnt

lib-stl.lnt

lib-w32.lnt

-si4 -sl4 -sp8

-w3

-e820

Это вполне рабочий вариант конфигурации, и пришло время интегрировать PC-lint в среду MSVC.

3. Интеграция в Visual Studio 2005

a0033_PC-lint_ru/image24.png

Рисунок 24. Запустим Visual Studio 2005. И приступим к интеграции PC-lint. Мы создадим три новых пункта в меню Tools:

Project Creation - создание проекта PC-lint для проверки всех фалов в проекте MSVC.

Project Check - проверка по ранее созданному проекту (проверка всех файлов);

Unit Check - проверка текущего файла.

В документации к PC-lint также описано использование операции под названием "Simple Check" для проверки отдельной единицы компиляции. Но на практике очень редко можно встретить независимые модули.

a0033_PC-lint_ru/image25.png

Рисунок 25. Выберите пункт "External Tools ..." в меню Tools.

a0033_PC-lint_ru/image26.png

Рисунок 26. Нажмите кнопку "Add".

a0033_PC-lint_ru/image27.png

Рисунок 27. Заполним соответствующие поля, как показано на рисунке.

a0033_PC-lint_ru/image28.png

Рисунок 28. Нажмем кнопку OK. И теперь мы сможем увидеть пункт "PC-lint (Project Creation)" в меню "Tools".

a0033_PC-lint_ru/image29.png

Рисунок 29. Теперь по аналогии с созданием пункта "Project Creation" мы создадим "Project Check". Для этого повторим все предыдущие шаги, но заполним поля по-другому (обратите внимание на галочки).

a0033_PC-lint_ru/image30.png

Рисунок 30. Последней командой является "Unit Check". Для ее создания выполняются все те же шаги.

a0033_PC-lint_ru/image31.png

Рисунок 31. Если Вы все сделали правильно, то во вкладке меню "Tools" Вы можете наблюдать три новых пункта. На этом интеграция PC-lint в Visual Studio закончена.

Если Вы хотите проверить весь ваш проект, следует вначале воспользоваться пунктом PC-lint (Project Creation), а затем PC-lint (Project Check).

Вновь использовать PC-lint (Project Creation) Вы должны, когда добавляете или удаляете файлы из проекта или модифицируете настройки проекта.

PC-lint (Unit Check) служит для проверки кода в текущем активном окне. Это удобно при написании нового кода. Учтите, чтобы воспользоваться PC-lint (Unit Check) вы также вначале должны выполнить PC-lint (Project Creation).

a0033_PC-lint_ru/image32.png

Рисунок 32. Теперь наградите себя за проделанную работу еще одной чашечкой кофе, и мы попробуем с вами эту новую утилиту.

a0033_PC-lint_ru/image33.png

Рисунок 33. Создадим простое Win32 консольное приложение.

a0033_PC-lint_ru/image34.png

Рисунок 34. Нам нужно самое простое приложение, поэтому нажимаем кнопку "Finish".

Напишем следующую программу. Убедимся, что программа компилируется, и компилятор не выдает предупреждений даже на четвертом уровне (/W4).

#include "stdafx.h"
TCHAR FooTxt[] = _T("foo");
bool Foo(int argc, _TCHAR* argv[])
{
  for (int i = 0; i != argc; ++i) {
    if (_tcscmp(argv[i], FooTxt) == 0)
    {
      return true;
    }
  }
  return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
  if (Foo(argc, argv))
    return 1;
  return 0;
}

Теперь пришло время воспользоваться PC-lint. Выполняем вначле "PC-lint (Project Creation)", а затем "PC-lint (Project Check)". Если все верно настроено, то Вы должны получить приблизительно следующий вывод:

PC-lint for C/C++ (NT) Vers. 8.00u, Copyright Gimpel Software 1985-2006

--- Module: .\SimpleProjectForPClint.cpp (C++)

}

.\SimpleProjectForPClint.cpp(14): error 818: (Info -- Pointer parameter 'argv' (line 5) could be declared as pointing to const)

.\SimpleProjectForPClint.cpp(5): error 830: (Info -- Location cited in prior message)

--- Module: .\stdafx.cpp (C++)

--- Wrap-up for Module: .\stdafx.cpp

.\stdafx.cpp(9): error 766: (Info -- Header file 'D:\WORK3\SimpleProjectForPClint\SimpleProjectForPClint\stdafx.h' not used in module '.\stdafx.cpp')

--- Global Wrap-up

.\SimpleProjectForPClint.cpp(5): error 765: (Info -- external 'Foo(int, unsigned short **)' (line 5, file .\SimpleProjectForPClint.cpp) could be made static)

.\SimpleProjectForPClint.cpp(3): error 765: (Info -- external 'FooTxt' (line 3, file .\SimpleProjectForPClint.cpp) could be made static)

D:\WORK3\SimpleProjectForPClint\SimpleProjectForPClint\stdafx.h(9): error 755: (Info -- global macro 'WIN32_LEAN_AND_MEAN' (line 9, file D:\WORK3\SimpleProjectForPClint\SimpleProjectForPClint\stdafx.h) not referenced)

error 900: (Note -- Successful completion, 6 messages produced)

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

Но если Вы получили сообщение:

PC-lint for C/C++ (NT) Vers. 8.00u, Copyright Gimpel Software 1985-2006

--- Module: .\pclint.cpp (C++)

_

#include <stdio.h>

D:\Sources\pclint\stdafx.h(10) : Error 322: Unable to open include file

'stdio.h'

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

echo %INCLUDE%

В результате Вы должны увидеть:

C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE;C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include;7

Если пути к заголовочным файлам Visual Studio отсутствуют, то необходимо либо поправить переменные окружения, либо прописать пути к файлам в конфигурационных файлах PC-lint.

a0033_PC-lint_ru/image35.png

Рисунок 35. Нажимая кнопку F4 в окне Output, Вы можете легко осуществлять навигацию по предупреждениям PC-lint.

На этом установку PC-lint 8.00 и интеграцию ее в Visual Studio 2005 можно считать завершенной. Следующим Вашим шагом должно стать ознакомление с документацией и настройка конфигурационных файлов под Ваши специфические потребности. Удачной работы!

Библиографический список

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

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

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам