Сообщения PVS-Studio


Какие ошибки ловит PVS-Studio?

Мы постарались сгруппировать большинство диагностик в несколько групп, чтобы вы могли получить общее представление о возможностях анализатора кода PVS-Studio.

Так как деление диагностик весьма условно, то некоторые диагностики входят в несколько групп. Например, неправильное условие "if (abc == abc)", можно одновременно интерпретировать и как простую опечатку, и как проблему безопасности, так как ошибка приводит к уязвимости кода при некорректных входных данных.

Некоторым ошибкам наоборот места в таблице не нашлось - уж слишком они специфичны. Тем не менее, таблица в целом дает представление о функциональности статического анализатора кода.

Список всех диагностик анализатора в XML

Список диагностик анализатора в формате XML, предназначенный для автоматического разбора, доступен по постоянной ссылке здесь.

Основные диагностические возможности PVS-Studio

Диагностики для С и C++

Диагностики для С#

64-битные ошибки

V101-V128, V201-V207, V220, V221, V301-V303

-

Адрес локальной переменной возвращается из функции по ссылке

V506, V507, V558, V758

-

Арифметическое переполнение, потеря значимости

V636, V658, V784, V786, V1012, V1028, V1029, V1033

V3040, V3041

Выход за границу массива

V557, V582, V643, V781

V3106

Двойное освобождение ресурсов

V586, V749, V1002, V1006

-

Мёртвый код

V606, V607

-

Микрооптимизации

V801-V821

-

Недостижимый код

V551, V695, V734, V776, V779, V785

V3136, V3142

Неинициализированные переменные

V573, V614, V679, V730, V737, V788, V1007

V3070, V3128

Неиспользуемые переменные

V603, V751, V763, V1001

V3061, V3065, V3077, V3117, V3137, V3143

Некорректные операции сдвига

V610, V629, V673, V684, V770

V3134

Неопределенное/неуточняемое поведение

V567, V610, V611, V681, V704, V708, V726, V736, V1016, V1026, V1032

-

Неправильная работа с типами (HRESULT, BSTR, BOOL, VARIANT_BOOL, float, double)

V543, V544, V545, V716, V721, V724, V745, V750, V676, V767, V768, V772, V775, V1027, V1034

V3111, V3121, V3148

Неправильное представление о работе функции/класса

V518, V530, V540, V541, V554, V575, V597, V598, V618, V630, V632, V663, V668, V698, V701, V702, V717, V718, V720, V723, V725, V727, V738, V742, V743, V748, V762, V764, V780, V789, V797, V1014, V1024, V1031, V1035

V3010, V3057, V3068, V3072, V3073, V3074, V3082, V3084, V3094, V3096, V3097, V3102, V3103, V3104, V3108, V3114, V3115, V3118, V3123, V3126, V3145

Опечатки

V501, V503, V504, V508, V511, V516, V519, V520, V521, V525, V527, V528, V529, V532, V533, V534, V535, V536, V537, V539, V546, V549, V552, V556, V559, V560, V561, V564, V568, V570, V571, V575, V577, V578, V584, V587, V588, V589, V590, V592, V600, V602, V604, V606, V607, V616, V617, V620, V621, V622, V625, V626, V627, V633, V637, V638, V639, V644, V646, V650, V651, V653, V654, V655, V660, V661, V662, V666, V669, V671, V672, V678, V682, V683, V693, V715, V722, V735, V747, V754, V756, V765, V767, V787, V791, V792, V796, V1013, V1015, V1021

V3001, V3003, V3005, V3007, V3008, V3009, V3011, V3012, V3014, V3015, V3016, V3020, V3028, V3029, V3034, V3035, V3036, V3037, V3038, V3050, V3055, V3056, V3057, V3062, V3063, V3066, V3081, V3086, V3091, V3092, V3107, V3109, V3110, V3112, V3113, V3116, V3122, V3124, V3132, V3140

Отсутствие виртуального деструктора

V599, V689

-

Оформление кода не совпадает с логикой его работы

V563, V612, V628, V640, V646, V705

V3018, V3033, V3043, V3067, V3069, V3138

Ошибки из-за Copy-Paste

V501, V517, V519, V523, V524, V571, V581, V649, V656, V691, V760, V766, V778, V1037

V3001, V3003, V3004, V3008, V3012, V3013, V3021, V3030, V3058, V3127, V3139, V3140

Ошибки при работе с исключениями

V509, V565, V596, V667, V740, V741, V746, V759, V1022

V3006, V3052, V3100, V3141

Переполнение буфера

V512, V514, V594, V635, V641, V645, V752, V755

-

Проблемы безопасности

V505, V510, V511, V512, V518, V531, V541, V547, V559, V560, V569, V570, V575, V576, V579, V583, V597, V598, V618, V623, V642, V645, V675, V676, V724, V727, V729, V733, V743, V745, V750, V771, V774, V782, V1003, V1005, V1010, V1017

V3022, V3023, V3025, V3027, V3053, V3063

Путаница с приоритетом операций

V502, V562, V593, V634, V648

V3130, V3133

Разыменование нулевого указателя/нулевой ссылки

V522, V595, V664, V757, V769

V3019, V3042, V3080, V3095, V3105, V3125, V3141, V3145, V3146, V3148

Разыменование параметров без предварительной проверки

V595, V664, V783, V1004

V3095

Ошибки синхронизации

V712, V1011, V1018, V1025, V1036

V3032, V3054, V3079, V3083, V3089, V3090, V3147

Ошибки при использовании WPF

-

V3044 - V3049

Утечки ресурсов

V701, V773, V1020, V1023

-

Целочисленное деление на 0

V609

V3064

Диагностики, созданные по специальным просьбам пользователей

V2001-V2014

-

Таблица 1 – Возможности PVS-Studio.

Как видите, анализатор максимально проявляет себя в таких областях, как поиск ошибок, возникших из-за опечаток и Copy-Paste. Хорошо диагностирует проблемы, которые связаны с безопасностью кода.

Как всё это работает на практике можно узнать, заглянув в базу ошибок. Мы собираем в эту базу все ошибки, которые нашли, проверяя различные открытые проекты с помощью PVS-Studio.

Диагностика общего назначения (General Analysis, C++)

Диагностика общего назначения (General Analysis, C#)

Диагностика общего назначения (General Analysis, Java)

Диагностика микро-оптимизаций (C++)

Диагностика 64-битных ошибок (Viva64, C++)

Реализовано по запросам пользователей (C++)

Cтандарт MISRA

Проблемы при работе анализатора кода (C++, C#)