От мазето на тайната лаборатория на разработчиците на PVS-Studio…, phpBB Developer Blog

Като цяло, как изглежда перфектният анализатор на статичен код за потребителя (във вакуум или не)? Струва ми се, въз основа на моя опит в тази област, че перфектният анализатор трябва да изглежда така. Потребителят изтегля помощната програма, стартира я, посочва папката с кода и натиска огромния зелен бутон: „Откриване на всички грешки!“. Без персонализиране, без „интегриране на план“. потребителят на чай не е необходим? Да, не е необходимо. Но е необходимо за анализатора на кода, за съжаление. Като минимум е необходима информация за #include и #define, ако говорим за C. Това е необходимо, за да се извърши предварителна обработка на кода.

И тук стигаме до необходимостта да изберем една от опциите:

  1. Или инструментът трябва да извлече тази информация от самия файл на плана (както правят нашите добавки за Visual C и C Builder).
  2. Или инструментът може да получи тази информация, ако му бъде предадена в Makefile (както работи нашата версия на командния ред).
  3. Или инструментът принуждава потребителя старателно да влиза във всички папки за #include и #define параметри, което е почти немислимо, т.к. За потребителя е изключително трудно да направи това.
  4. Или ... измислете някакъв друг вариант.

Поехме по четвъртия път и решихме да опитаме това. Но какво ще стане, ако анализаторът получи като първоначална информация не обикновени източници под формата на .cpp файлове, а по-скоро предварително обработени файлове. Тези. файлове, които се обработват от препроцесора. Това ще ни спести необходимостта да извикваме препроцесора и съответно да знаем тези #include и #define.

Разбира се, това е малко по-различно от идеалната версия на анализатора, описана по-горе. Но от друга страна, позволява използването на PVS-Студио за практически всеки C/C план, без значение в каква среда за разработка го изпълнявате.

Оказва се, че инструментът, който се разработва в тайните лаборатории на нашия екип, изглежда по следния начин:

разработчиците
Фигура 1 - Диалог за стартиране на проверката на предварително обработени файлове.

Първо посочваме папката, където се намират предварително обработените .i файлове. Те ще бъдат изследвани от нашия инструмент.

Второ, посочваме папката източник. Това е необходимо, за да се идентифицират грешките по-правилно. В допълнение, неизменно е по-добре (по-късно) да навигирате в дефинирани от потребителя .cpp файлове, а не в .i-файлове, които изобщо не са разбираеми за хората.

Трето, посочваме папката, в която се намират системните включени файлове. Най-основното, така да се каже. За какво? Така че анализаторът да знае, че тук са файловете, за които не е необходимо да се издават диагностични съобщения.

Оказва се, че можем да „захраним“ предварително обработените файлове на тази програма и след това да стартираме анализатора върху тях. Ето как тестваме плана Boost в реално време. Между другото, скоро ще има доклад за преглед на Boost - абонирайте се за нашия блог, за да не го пропуснете. След проверка на файловете получаваме списък с диагностични съобщения като този:

phpbb
Фигура 2 - Списък с диагностични съобщения след проверка на i-файлове.

Разбира се, тази публикация не включва пълноценно представяне на новата ни тайна помощна програма. Мога обаче да отговоря по-подробно на няколко въпроса.

Кой НЕ се нуждае от тази помощна програма? Тези, които могат лесно да проверят своя план в PVS-Studio с поддръжка за интеграция в Visual Studio и C Builder. Кой се нуждае от тази помощна програма? За тези, които искат да проверят кода си с поддръжка на PVS-Studio и да използват други среди за разработка и/или файлове на проекти, които са трудни завградете нашата помощна програма за команден ред.

Какво бихте искали да видите такава помощна програма? Удобен ли сте с режима на проверка чрез готови предварително обработени файлове? Какво липсва в такава помощна програма? Трябва ли да го пуснем или да изоставим последващото разработване на тази помощна програма, тъй като всички са доволни от нашата интеграция в среди на Microsoft / Embarcadero?