En este artículo, le contaré sobre PVS-Studio, un analizador de código C y C ++, y le mostraré cómo usarlo en el entorno Visual C ++. Esta guía está destinada específicamente para usuarios principiantes.
Instalar el analizador
PVS-Studio es compatible con Microsoft Visual Studio 2019, 2017, 2015, 2013, 2012 y 2010. Consulte la
documentación para conocer los requisitos del sistema. Actualmente, PVS-Studio puede analizar proyectos escritos en C, C ++, C # y Java. Sin embargo, este artículo se centra en los programadores que trabajan en Visual C ++ y buscan ayuda para comenzar con el analizador.
El paquete de instalación se puede descargar
aquí . Después de ejecutarlo, se le ofrecerán varias opciones de integración (Figura 1) para elegir. Las opciones no disponibles están atenuadas.
Figura 1. Ventana de selección de componentes de integración.Después de haber instalado PVS-Studio, abra la ventana Acerca de Visual Studio y asegúrese de que el analizador esté presente entre los productos instalados.
Comprobando un proyecto
Una vez que se completa la instalación, puede continuar para verificar su proyecto. También puede intentar analizar la solución completa. Para hacerlo, haga clic en Extensiones → PVS-Studio → Verificar → Solución (Figura 2).
Figura 2. Comprobación de una solución con PVS-Studio.Si tiene dificultades para ejecutar la verificación, consulte la sección "
PVS-Studio: Solución de problemas " en nuestro sitio web. Esas no son algunas sugerencias tontas como "asegúrese de que el enchufe esté enchufado a la toma de corriente". La sección describe problemas típicos que nuestros usuarios han informado y formas de resolverlos.
Manejo de la lista de advertencias
Una vez que se complete la verificación, los mensajes de diagnóstico aparecerán en una ventana especial. Esta ventana tiene muchos elementos, todos los cuales sirven para manipular la lista para que pueda ver solo las advertencias de interés. Al principio, sin embargo, puede parecer algo complicado.
Figura 3. Ventana de advertencias. Haga clic en la imagen para ampliar.La descripción completa de los elementos de la ventana se puede encontrar en la
documentación , pero ahora nos centraremos solo en los básicos:
- Niveles de certeza de advertencias. La captura de pantalla anterior muestra los niveles medio y alto habilitados. El nivel bajo se ocupa más de "olores de código" y advertencias que, desafortunadamente, tienden a producir demasiados falsos positivos. ¿Por qué hay tantas advertencias de nivel bajo y medio pero tan pocas de alto nivel? La respuesta es que se han habilitado los diagnósticos MISRA, que contienen reglas como "la función debe tener un solo punto de salida". Por supuesto, normalmente no necesita estos diagnósticos, por lo que están deshabilitados de forma predeterminada. Nota: " ¿Cómo consultar rápidamente las advertencias interesantes que proporciona el analizador PVS-Studio para el código C y C ++? ".
- El filtro Puede filtrar los mensajes por código, CWE, texto, proyecto o archivo.
- El número de la línea de activación. Algunos diagnósticos pueden referirse a varias líneas: tales advertencias tienen puntos suspensivos al lado del número de línea.
SAST
PVS-Studio es una herramienta para pruebas de seguridad de aplicaciones estáticas (SAST), lo que significa que puede detectar vulnerabilidades potenciales en el código fuente y mostrar el identificador de debilidad correspondiente de acuerdo con una clasificación particular.
PVS-Studio admite las siguientes clasificaciones de debilidades:
- CWE
- SEI CERT
- Misra
Para habilitar los códigos CWE, abra el menú desplegable de la ventana del analizador y luego marque Mostrar columnas> CWE
Figura 4. Habilitación de códigos CWE desde el menú desplegable.Otra forma de hacerlo es Extensiones> PVS-Studio> Mostrar códigos CWE en la ventana de salida en la barra de menú de Visual Studio
Figura 5. Submenú PVS-Studio en el menú Extensiones.A diferencia de eso, los diagnósticos MISRA están habilitados en la ventana de opciones:
Figura 6. Lista de debilidades detectables.Puede obtener más información sobre estas clasificaciones
aquí .
Verificación de proyectos desde la línea de comando
PVS-Studio_Cmd.exe es una utilidad para verificar proyectos y soluciones C ++ .vcxproj desde la línea de comandos. Puede ser útil si desea automatizar el proceso de análisis. El programa se puede encontrar en el directorio de instalación, que es 'C: \ Archivos de programa (x86) \ PVS-Studio' de forma predeterminada.
La utilidad tiene múltiples
parámetros , pero solo necesitará tres para comenzar:
- --target: el archivo del proyecto o solución a verificar.
- --output: el archivo plog para almacenar el informe de análisis.
- --progreso: realiza un seguimiento del progreso del análisis.
Esto es lo que verá después de comenzar la verificación:
Figura 7. Salida de la utilidad PVS-Studio_Cmd.exeUna vez finalizada la verificación, se creará un archivo de plog que contiene el informe de análisis en el directorio especificado en los parámetros de inicio. Este informe se puede convertir a otros formatos utilizando la utilidad PlogConverter.exe, y si desea abrir el informe en el IDE, simplemente haga doble clic en el archivo plog en el Explorador de Windows.
El archivo del informe también se puede abrir desde el menú Extensiones: Extensiones> PVS-Studio> Abrir / Guardar> Abrir informe de análisis ...
Figura 8. Abrir un informe de análisis desde el menú del complemento.Consulte la
documentación para obtener detalles sobre la utilidad y sus parámetros.
Suprimir falsos positivos
El analizador proporciona una variedad de medios para suprimir los falsos positivos. Se describen en detalle en las siguientes secciones:
- Afinacion fina .
- Supresión masiva , que es especialmente útil cuando desea suprimir solo aquellas advertencias que se refieren a código nuevo o modificado.
Advertencia de muestra
Echemos un vistazo a un ejemplo de advertencia emitida por el analizador. El siguiente fragmento de código se toma del proyecto ReactOS:
VOID NTAPI AtapiDmaInit(....) { .... ULONG treg = 0x54 + (dev < 3) ? (dev << 1) : 7; .... }
Mensaje de diagnóstico de PVS-Studio: V502 Quizás el operador '?:' Funciona de una manera diferente a la esperada. El operador '?:' Tiene una prioridad menor que el operador '+'. uniata id_dma.cpp 1610
La expresión
0x54 + (dev <3) siempre se evaluará como
verdadera : la constante no nula
0x54 se agrega primero al resultado de la expresión
(dev <3) , que puede evaluar 0 o 1, y solo entonces es valor resultante en comparación con cero.
Así es como se ve la versión correcta:
VOID NTAPI AtapiDmaInit(....) { .... ULONG treg = 0x54 + ((dev < 3) ? (dev << 1) : 7); .... }
Hemos resuelto el problema encerrando la operación
'?:' Entre paréntesis para que su resultado ahora dependa del resultado de la expresión
(dev <3) .
Conclusión
Esa fue una breve introducción para comenzar a utilizar PVS-Studio para Visual C ++. No cubre todos los aspectos, por supuesto, así que bienvenido a nuestro
blog , donde explicamos en detalle cómo trabajar con el analizador y vemos la
documentación para obtener descripciones completas de los mensajes de diagnóstico y la configuración de la herramienta.