Сообщения 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

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

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

V3070, V3128

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

V603, V751, V763, V1001

V3061, V3065, V3077, V3117, V3137

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

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

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

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

Опечатки

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

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

V599, V689

-

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

V563, V612, V628, V640, V646, V705

V3018, V3033, V3043, V3067, V3069

Ошибки из-за 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

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

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

V3006, V3052, V3100

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

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

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

V595, V664, V783, V1004

V3095

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

V712, V1011, V1018, V1025, V1036

V3032, V3054, V3079, V3083, V3089, V3090

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

-

V3044 - V3049

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

V701, V773, V1020, V1023

-

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

V609

V3064

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

V2001-V2014

-

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

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

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


Найденные ошибки

Проверено проектов
346
Собрано ошибок
13 188

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;