Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Установка PC-Lint и его использованиев Visual Studio 2005Автор: Андрей КарповДата: 05.12.2006АннотацияСтатья посвящена пер...
В этой статье рассмотрены первые шаги по осваиванию статического анализатора Gimpel SoftwarePC-Lint версии 8.0. Это связан...
Рисунок 1. Запускаем инсталлятор.
Рисунок 2. Листаем первые страницы мастера установки.
Рисунок 3. Соглашаемся с лицензионным соглашением.
Рисунок 4. Вводим свое имя и название организации.
Рисунок 5. Выбираем папку для установки. Поскольку вам придется часто работать с папкой, гдеустановлен PC-lint, чтобы попр...
Рисунок 6. Продолжаем процесс установки.
Рисунок 7. Когда установка будет завершена, соглашаемся на запуск конфигурационнойпрограммы.
Рисунок 8. Теперь время заварить кофе и приготовиться к настройкам вашего новогоинструментария.
Рисунок 9. PC-lint допускает автономное использование в пакетном режиме. Но, на наш взгляд,более удобным представляется ег...
2. Первоначальная настройка
Рисунок 10. Выбираем расположение конфигурационного файла, который сейчас создаст мастернастройки. Мы рекомендуем располож...
Рисунок 11. Выбираем наиболее подходящий конфигурационный файл для нашего компилятора.К сожалению, мы не найдем в списке V...
Рисунок 12. Выбираем интересующую нас модель данных.
Рисунок 13. Скорее всего, Вам понадобится поддержка библиотек MFC, STL и Win32API, так чтоподключаем соответствующие конфи...
действие: копирует необходимые для работы LNT файлы из каталога "C:Lintlnt" в каталог"C:Lint". Иначе Вам будет необходимо ...
Рисунок 14. Что выбрать из списка различных наборов правил по проверке кода, решать Вам.Можете пока ничего не выбирать, а ...
Рисунок 15. Если вы используете в своей программе не только стандартные заголовочные файлы,но и сторонние библиотеки (напр...
Рисунок 16. Прописываем пути к необходимым заголовочным файлам. Настойчиво рекомендуетсяэто сделать, в противном случае PC...
Рисунок 19. Мы можем также провести некоторые дополнительные настройки по поведению PC   PC-lint. Сейчас мы пройдем этот э...
Рисунок 21. Выбираем наиболее подходящие настройки для нашей среды. Выбор "env-vc7.lnt"никак не отражается на генерируемых...
непонятен. Возможно, существует ошибка в мастере конфигурации. Позже мы добавим "env-vc7.lnt" в конфигурацию самостоятельно.
Рисунок 22. Поскольку мы не собираемся использовать PC-lint в пакетном режиме, мы можемпропустить данный шаг конфигурирова...
Рисунок 23. Установка утилиты завершена полностью! Теперь можно приступить к окончательнойнастройке и интеграции в Visual ...
lib-mfc.lnt lib-stl.lnt lib-w32.lntoptions.lnt -si4 -sl4 -sp8-iD:ASRCfox-libfox-1.4.4include-iD:ASRCLibrariesmesaincludeСт...
Это вполне рабочий вариант конфигурации, и пришло время интегрировать PC                           конфигурации,          ...
Рисунок 24. Запустим Visual Studio 2005. И приступим к интеграции PC-lint. Мы создадим три новыхпункта в меню Tools:Projec...
Рисунок 26. Нажмите кнопку "Add".
Рисунок 27. Заполним соответствующие поля, как показано на рисунке.
Рисунок 28. Нажмем кнопку OK. И теперь мы сможем увидеть пункт "PC-lint (Project Creation)" вменю "Tools".
Рисунок 29. Теперь по аналогии с созданием пункта "Project Creation" мы создадим "ProjectCheck". Для этого повторим все пр...
Рисунок 30. Последней командой является "Unit Check". Для ее создания выполняются все те жешаги.
Рисунок 31. Если Вы все сделали правильно, то во вкладке меню "Tools" Вы можете наблюдать триновых пункта. На этом интегра...
Рисунок 32. Теперь наградите себя за проделанную работу еще одной чашечкой кофе, и мыпопробуем с вами эту новую утилиту.
Рисунок 33. Создадим простое Win32 консольное приложение.
Рисунок 34. Нам нужно самое простое приложение, поэтому нажимаем кнопку "Finish".Напишем следующую программу. Убедимся, чт...
return 1;    return 0;}Теперь пришло время воспользоваться PC-lint. Выполняем вначле "PC-lint (Project Creation)", азатем ...
D:Sourcespclintstdafx.h(10) : Error 322: Unable to open include fi                  stdafx.h(10)                          ...
Рисунок 35. Нажимая кнопку F4 в окне Output, Вы можете легко осуществлять навигацию попредупреждениям PC-lint.На этом уста...
Установка PC-Lint и его использование в Visual Studio 2005
Установка PC-Lint и его использование в Visual Studio 2005
Upcoming SlideShare
Loading in …5
×

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

423 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Установка PC-Lint и его использованиев Visual Studio 2005Автор: Андрей КарповДата: 05.12.2006АннотацияСтатья посвящена первому знакомству со статическим анализатором Си++-кода PC-Lint версии 8.0.Описан процесс установки инструмента и его первоначальной настройки.ВведениеЯзык Си++ является одним из самых мощных, но, в то же время, и одним из самых сложныхязыков программирования. Написано бесчисленное количество литературы по созданиюкачественного кода, использованию различных методологий разработки и тестирования. Однакопроблема повышения качества создаваемого кода до сих пор остается актуальной и не до концапроработанной областью.Среди инструментов, помогающих в тестировании и улучшении программного кода, можновыделить несколько классов.К первому классу можно отнести системы, автоматизирующие юнит-тестирование. В качествепримера можно привести такие известные программные продукты, как AutomatedQATestComplete (http://www.automatedqa.com) или Parasoft Jtest (http://www.parasoft.com). Даннаяметодология тестирования с большим успехом применяется во многих компаниях и незаменима вслучае работы над динамично развивающимся программным продуктом.Другое направление - сокращение издержек на этапе тестирования ПО, за счёт выявленияобластей ПО затронутых изменениями. Это позволяет значительно сократить объёмы ручноготестирования и выделить модифицированные участки для более тщательной проверки. Такойподход поддерживает высокое качество тестирования при меньших временных затратах.Представителем такого класса инструментов является Testing Relief (http://www.testingrelief.net).При отладке больших приложений хорошо зарекомендовали себя динамические анализаторы. Кним можно отнести Valgrind (http://valgrind.org), Compuware BoundsChecker(http://www.compuware.com).Широкий спектр задач по повышению качества программного кода решают статическиеанализаторы, как общего назначения, так и специализированного. К первым можно отнести,например, продукцию компании Coverity Incorporated (http://www.coverity.com) или GimpelSoftware PC-Lint (http://www.gimpel.com), который мы рассмотрим подробнее. Кспециализированным статическим анализаторам можно отнести инструмент Viva64(http://www.viva64.com), предназначенный для диагностики ошибок в 64-битном коде.
  2. 2. В этой статье рассмотрены первые шаги по осваиванию статического анализатора Gimpel SoftwarePC-Lint версии 8.0. Это связано с его популярностью и заинтересованностью разработчиковпрограммного обеспечения в использовании подобных статических анализаторов. Использованиестатических анализаторов кода давно стало культурой в крупных компаниях и интерес кподобным инструментам непрерывно растет.1. Установка PC-LintПри первом знакомстве с PC-lint у начинающего пользователя могут возникнуть трудности спониманием принципов работы и настройки этой программы. Выполнив предлагаемые в даннойстатье рекомендации, Вы быстрее сможете приступить к непосредственно анализу кода и нетратить время на изучение нюансов настройки на первых этапах работы.Данная статья по установке и настройки PC-lint будет представлять собой наглядное руководство,состоящее из рисунков, демонстрирующих последовательные шаги и пояснительного текста кним.
  3. 3. Рисунок 1. Запускаем инсталлятор.
  4. 4. Рисунок 2. Листаем первые страницы мастера установки.
  5. 5. Рисунок 3. Соглашаемся с лицензионным соглашением.
  6. 6. Рисунок 4. Вводим свое имя и название организации.
  7. 7. Рисунок 5. Выбираем папку для установки. Поскольку вам придется часто работать с папкой, гдеустановлен PC-lint, чтобы поправить конфигурационный файл или почитать документацию, нерекомендуем устанавливать его в папку с большим уровнем вложенности. С другой стороны,после установки Вы можете настроить ссылки на интересующие вас файлы, и тогда местоустановки не имеет значение. Мы соглашаемся на установку в корневой каталог диска C.
  8. 8. Рисунок 6. Продолжаем процесс установки.
  9. 9. Рисунок 7. Когда установка будет завершена, соглашаемся на запуск конфигурационнойпрограммы.
  10. 10. Рисунок 8. Теперь время заварить кофе и приготовиться к настройкам вашего новогоинструментария.
  11. 11. Рисунок 9. PC-lint допускает автономное использование в пакетном режиме. Но, на наш взгляд,более удобным представляется его интерактивное использования из среды Visual Studio.Описание процесса интеграции PC-lint в среду можно почерпнуть из файла env-vc7.lnt. Этот файлсодержит информацию об интеграции в Visual Studio 2003, но разница по сравнению синтеграцией в Visual Studio 2005 совсем незначительна. Вы можете не обращаться к этому файлу,а воспользоваться для настройки нашим документом, в который уже внесены необходимыепоправки касательно Visual Studio 2005.
  12. 12. 2. Первоначальная настройка
  13. 13. Рисунок 10. Выбираем расположение конфигурационного файла, который сейчас создаст мастернастройки. Мы рекомендуем расположить его там же, где установлен PC-lint, чтобы все файлы,которые относятся к этой утилите, находились в одном месте. В противном случае Вам придетсячуть больше повозиться с настройкой путей к разным файлам. Вы также можете использовать ужесуществующий файл конфигурации. Выберем создание нового файла конфигурации.
  14. 14. Рисунок 11. Выбираем наиболее подходящий конфигурационный файл для нашего компилятора.К сожалению, мы не найдем в списке Visual C++ 2005, поэтому остановим свой выбор на Visual C++2003. В дальнейшем мы вручную скорректируем сгенерированный мастером настроекконфигурационный файл "STD.LNT".
  15. 15. Рисунок 12. Выбираем интересующую нас модель данных.
  16. 16. Рисунок 13. Скорее всего, Вам понадобится поддержка библиотек MFC, STL и Win32API, так чтоподключаем соответствующие конфигурационные файлы. Эта настройка выполняет очень важное
  17. 17. действие: копирует необходимые для работы LNT файлы из каталога "C:Lintlnt" в каталог"C:Lint". Иначе Вам будет необходимо выполнить это копирование вручную. В каталоге"C:Lintlnt" эти файлы не обнаруживаются, даже если путь к ним прописать в переменнойокружения PATH.
  18. 18. Рисунок 14. Что выбрать из списка различных наборов правил по проверке кода, решать Вам.Можете пока ничего не выбирать, а потом вручную (или этим же мастером настроек) добавлятьили убирать различные наборы, анализируя затем результат проверки на ваших программах.
  19. 19. Рисунок 15. Если вы используете в своей программе не только стандартные заголовочные файлы,но и сторонние библиотеки (например, Mesa), то вам понадобится прописать соответствующиепути.
  20. 20. Рисунок 16. Прописываем пути к необходимым заголовочным файлам. Настойчиво рекомендуетсяэто сделать, в противном случае PC-lint будет просто останавливаться на строках #include"unknown.h".Рисунок 17. Все, создание заготовки конфигурационного файла завершено!Рисунок 18. Теперь мы можем, используя его как образец, сделать нужные намконфигурационные файлы. Других конфигураций создавать не будем, поэтому выберем "No".
  21. 21. Рисунок 19. Мы можем также провести некоторые дополнительные настройки по поведению PC PC-lint. Сейчас мы пройдем этот этап, чтобы в дальнейшем продемонстрировать связь этих настроек ссодержимым конфигурационного файла "options.lnt".Рисунок 20. Не будем подробно останавливаться на следующих настройках. Вам самим придетсявыбрать, что считать подозрительным кодом, а что нет. Но отметим, что мы выбрали не считатьподозрительной следующую конструкцию: дозрительнойif ( (a = b) ) { ...}
  22. 22. Рисунок 21. Выбираем наиболее подходящие настройки для нашей среды. Выбор "env-vc7.lnt"никак не отражается на генерируемых конфигурационных файлах. Смысл этой настройки
  23. 23. непонятен. Возможно, существует ошибка в мастере конфигурации. Позже мы добавим "env-vc7.lnt" в конфигурацию самостоятельно.
  24. 24. Рисунок 22. Поскольку мы не собираемся использовать PC-lint в пакетном режиме, мы можемпропустить данный шаг конфигурирования.
  25. 25. Рисунок 23. Установка утилиты завершена полностью! Теперь можно приступить к окончательнойнастройке и интеграции в Visual Studio 2005.В начале, нам надо отправиться на сайт http://www.gimpel.com и скачать новые обновления дляPC-lint и новые конфигурационные файлы. Так как мы используем версию 8.00, то скачиваем длянее обновления со страницы http://www.viva64.com/go.php?url=501.Если у вас отсутствует файл "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 optionsco-msc71.lnt
  26. 26. lib-mfc.lnt lib-stl.lnt lib-w32.lntoptions.lnt -si4 -sl4 -sp8-iD:ASRCfox-libfox-1.4.4include-iD:ASRCLibrariesmesaincludeСтрочка "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:ASRCfox-libfox-1.4.4include-iD:ASRCLibrariesmesaincludeco-msc80.lntenv-vc7.lntlib-mfc.lntlib-stl.lntlib-w32.lnt-si4 -sl4 -sp8-w3-e820
  27. 27. Это вполне рабочий вариант конфигурации, и пришло время интегрировать PC конфигурации, PC-lint в среду MSVC.3. Интеграция в Visual Studio 2005
  28. 28. Рисунок 24. Запустим Visual Studio 2005. И приступим к интеграции PC-lint. Мы создадим три новыхпункта в меню Tools:Project Creation - создание проекта PC-lint для проверки всех фалов в проекте MSVC.Project Check - проверка по ранее созданному проекту (проверка всех файлов);Unit Check - проверка текущего файла.В документации к PC-lint также описано использование операции под названием "Simple Check"для проверки отдельной единицы компиляции. Но на практике очень редко можно встретитьнезависимые модули.Рисунок 25. Выберите пункт "External Tools ..." в меню Tools.
  29. 29. Рисунок 26. Нажмите кнопку "Add".
  30. 30. Рисунок 27. Заполним соответствующие поля, как показано на рисунке.
  31. 31. Рисунок 28. Нажмем кнопку OK. И теперь мы сможем увидеть пункт "PC-lint (Project Creation)" вменю "Tools".
  32. 32. Рисунок 29. Теперь по аналогии с созданием пункта "Project Creation" мы создадим "ProjectCheck". Для этого повторим все предыдущие шаги, но заполним поля по-другому (обратитевнимание на галочки).
  33. 33. Рисунок 30. Последней командой является "Unit Check". Для ее создания выполняются все те жешаги.
  34. 34. Рисунок 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).
  35. 35. Рисунок 32. Теперь наградите себя за проделанную работу еще одной чашечкой кофе, и мыпопробуем с вами эту новую утилиту.
  36. 36. Рисунок 33. Создадим простое Win32 консольное приложение.
  37. 37. Рисунок 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)) Foo(argc,
  38. 38. 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 declaredas 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 fileD:WORK3SimpleProjectForPClintSimpleProjectForPClintstdafx.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:WORK3SimpleProjectForPClintSimpleProjectForPClintstdafx.h(9): error 755: (Info -- global macroWIN32_LEAN_AND_MEAN (line 9, fileD:WORK3SimpleProjectForPClintSimpleProjectForPClintstdafx.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>
  39. 39. D:Sourcespclintstdafx.h(10) : Error 322: Unable to open include fi stdafx.h(10) filestdio.hто это означает, что у Вас не настроены переменные окружения, и Вам необходимо проверитьпеременную окружения INCLUDE, для чего в командной строке напишемecho %INCLUDE%В результате Вы должны увидеть:C:Program FilesMicrosoft Visual Studio 8VCATLMFCINCLUDE;C:Program Files Microsoft Program FilesMicrosoft VisualStudio 8VCINCLUDE;C:Program Files Program FilesMicrosoft Visual Studio 8VCPlatformSDK PlatformSDKinclude;C:ProgramFilesMicrosoft Visual Studio 8 Microsoft 8SDKv2.0include;7Если пути к заголовочным файлам Visual Studio отсутствуют, то необходимо либо поправить отсутствуют,переменные окружения, либо прописать пути к файлам в конфигурационных файлах PC PC-lint.
  40. 40. Рисунок 35. Нажимая кнопку F4 в окне Output, Вы можете легко осуществлять навигацию попредупреждениям PC-lint.На этом установку PC-lint 8.00 и интеграцию ее в Visual Studio 2005 можно считать завершенной. lintСледующим Вашим шагом должно стать ознакомление с документацией и настройкаконфигурационных файлов под Ваши специфические потребности. Удачной работы!Библиографический список 1. Wikipedia, "Unit testing", http://www.viva64.com/go.php?url=44 2. Wikipedia, "Dynamic testing", http://www.viva64.com/go.php?url=45 3. Wikipedia, "Static testing" http://www.viva64.com/go.php?url=46 testing", 4. Wikipedia, "Static code analysis", http://www.viva64.com/go.php?url=31 5. Wikipedia, "White box testing", http://www.viva64.com/go.php?url=47 6. Wikipedia, "Black box testing", http://www.viva64.com/go.php?url=48

×