PVS-Studio para JetBrains CLion:ad astra per aspera

 C Programming >> Programación C >  >> Tags >> CLion
PVS-Studio para JetBrains CLion:ad astra per aspera

El analizador PVS-Studio ya tiene complementos para IDE de JetBrains como Rider, IntelliJ IDEA y Android Studio. De alguna manera nos perdimos otro IDE - CLion. ¡Ha llegado el momento de hacer las paces! Pero, ¿por qué necesitaría PVS-Studio si CLion ya tiene el analizador de código? ¿Qué problemas aparecieron durante el desarrollo? Sigue leyendo para encontrar respuestas a estas preguntas.

No habrá tech-hardcore en este artículo. Esta es más una historia sobre momentos con los que nos topamos durante el proceso de desarrollo. Relájate y disfruta de tu lectura.;)

Nota . Por cierto, el sitio web de JetBrains proporciona los resultados de varias encuestas para 2021. Las cifras cubren los estándares de lenguaje, IDE, herramientas, etc. más comunes. Recomiendo encarecidamente leer, vale la pena. CLion es uno de los tres IDE/editores más utilizados. ¿Qué IDE para C/C++ usas?

¿Por qué necesitaría PVS-Studio si CLion ya tiene un analizador estático?

¡Me alegra que hayas preguntado! Déjame responderte con una pequeña historia.

JetBrains mantiene una cuenta de Twitter separada para CLion donde comparten varias noticias, informan sobre las nuevas características de IDE, etc. Uno de los tweets era un ejemplo de cómo funciona el DFA global.

El ejemplo demuestra cómo el analizador estático logró detectar la desreferencia de buffer puntero nulo obtenido de foo función. Andrey, nuestro DevRel, decidió modificar el ejemplo y ver cómo lo manejaría CLion.

Resultado:la misma advertencia de CLion. PVS-Studio, sin embargo, emite dos advertencias:

  • V522 Puede haber una desreferenciación de un posible 'búfer' de puntero nulo.
  • V611 La memoria se asignó usando el operador 'nuevo' pero se liberó usando la función 'libre'. Considere inspeccionar las lógicas de operación detrás de la variable 'buffer'.

Aquí hay una respuesta a la pregunta que estamos discutiendo:la colaboración de PVS-Studio y CLion nos permitirá detectar más errores en la etapa de escritura del código. CLion resalta los errores sobre la marcha, pero al mismo tiempo tiene capacidades de análisis limitadas. PVS-Studio no resalta los errores inmediatamente, pero puede realizar un análisis más profundo. Tenga en cuenta que PVS-Studio tiene un análisis incremental:el modo que comprueba solo los archivos modificados.

Como resultado, el análisis de CLion y el análisis de PVS-Studio se complementan entre sí. Imagina lo que pasaría si también añadiéramos las advertencias del compilador... :)

Segundo nacimiento

A decir verdad, teníamos un prototipo de complemento para CLion... hace varios años. Sí, hace un tiempo que empezamos a desarrollarlo. Pero no estaba destinado a terminarlo por varias razones. El prototipo se fue al estante.

Ahora, dado que los usuarios se interesaron cada vez más, decidimos terminar lo que habíamos comenzado. Más precisamente, teníamos un par de formas posibles. O modificamos el prototipo existente o empezamos de nuevo.

Spoiler:ambos fueron un viaje lleno de baches.

Después de encontrar las fuentes en el repositorio, decidimos verificar el nivel de preparación. ¿Qué pasa si no hay mucho que terminar? Sorprendentemente, el código se compiló inmediatamente y eso nos animó.

Nota . ¡Hola desde el departamento de C#! Hace aproximadamente un año, adaptamos el analizador de C# a Linux y macOS. Y lo que es interesante, logramos ejecutar PVS-Studio en Linux el primer día de trabajo en la tarea. Sin embargo, el analizador PVS-Studio para C# para Linux/macOS se envió solo seis meses después. Hablando de cuántos matices se interponen en el camino...

Buenas noticias:código compilado y el prototipo ya tenía algunas características. Malas noticias:todavía necesitábamos integrarlo en IDE. Al mismo tiempo, el futuro complemento debe tener las características principales de los complementos de PVS-Studio para IDE de JetBrains:Rider, IntelliJ IDEA, Android Studio. Está claro que habrá algunos detalles. Pero, en general, el usuario que prueba PVS-Studio junto con varios IDE, debe seguir el mismo escenario para trabajar con el analizador, interactuar con la misma configuración e interfaz de usuario.

Como resultado, intentamos tomar el complemento para Rider como una solución lista para usar. Sin embargo, descubrimos que no podíamos reutilizar inmediatamente esos desarrollos para CLion. Demasiados detalles.

Aquí surge una pregunta natural:¿por qué no empiezas todo desde cero? ¡Simplemente tome una 'plantilla' lista para usar y agregue la funcionalidad existente del prototipo en ella! Bueno, vale la pena intentarlo.

Hemos encontrado una plantilla del sitio web oficial de JetBrains. Pero después de que lo descargamos, resultó que la muestra... no se estaba compilando.

Después de una breve investigación, descubrimos que era una muestra para versiones anteriores de CLion. La API ha cambiado en las nuevas, de ahí los problemas.

Curiosamente, hay una instrucción en el blog de JetBrains que explica cómo arreglar la muestra para que funcione. Las ediciones ayudaron a lanzar la muestra. Sin embargo, el enfoque en sí planteó una pregunta:¿por qué no hacer una muestra separada?

Como resultado, después de combinar el prototipo con la plantilla, descubrimos que... nada funciona. Uno podría querer renunciar al prototipo y escribir todo desde cero. Parece que para hacer esto solo necesitamos una descripción de la interacción API e IDE. Pero no tan rápido.

Los resultados de la búsqueda de documentación de la API se veían así:

Bromas aparte, no encontramos nada en el sitio web de JetBrains. En absoluto. Una idea dudosa:buscar entre todas las clases disponibles con la esperanza de encontrar la correcta. Nuestros desarrolladores que crearon el complemento PVS-Studio para Rider confirmaron nuestras preocupaciones:no hay documentación.

Pero si sabe dónde encontrar dichos documentos, deje un comentario. Será útil para nosotros y será útil para otros.

Tal vez, es hora de dejar de apresurarse para comenzar todo desde 0:necesitamos completar lo que tenemos. Puede ser doloroso, pero es más fácil que comenzar de nuevo el desarrollo. La decisión fue correcta:después de un tiempo de depuración y edición, resultó que el prototipo, en general, ya estaba haciendo lo que se necesitaba. Como resultado, rápidamente logramos enseñarle a obtener una lista de archivos de código fuente del proyecto.

Gradualmente migramos el código, el complemento adquirió funcionalidad. Eventualmente comenzó a operar como lo necesitábamos. Pero esto se aplicaba solo a Windows, ya que el desarrollo principal se llevó a cabo en este sistema operativo. Inicialmente, estábamos escribiendo código para la compatibilidad multiplataforma, pero después de probarlo en Linux y macOS, tuvimos que agregar algunas mejoras. En algunos casos, tuvimos que hacer algo más que editar el código del complemento. También tuvimos que profundizar en el núcleo del analizador de C++. De hecho, fue una tarea multilingüe:el conocimiento de Java y C++ resultó útil.

Hubo dos mejoras importantes:

  • el analizador de C++ ahora tiene en cuenta las variables de entorno al analizar a través de la base de datos de compilación JSON;
  • además, el analizador aprendió a mostrar los problemas detectados uno por uno y no todos juntos después de analizar todo. Esto nos permitió agregar más interactividad; ahora no necesita esperar al final del análisis para comenzar a analizar los errores. Podemos hacerlo durante el análisis.

¿Cómo probarlo?

No habría artículo si no tuviéramos el resultado. No hay intriga aquí, por desgracia. :)

El complemento PVS-Studio para CLion está disponible para su uso.

Para probarlo, necesitas:

  • solicitar una licencia de prueba;
  • instale el analizador y el complemento.

Puede solicitar una licencia y descargar el analizador aquí. Siga el enlace para obtener un período de prueba extendido por 30 días.;)

La instalación del complemento también es simple. Puede encontrar los detalles en la sección de documentación relevante:cómo descargar, ingresar la licencia y qué hacer a continuación.

Pruébalo, úsalo, escríbenos si algo no funciona. También agradecemos todas las sugerencias para mejorar la integración.

Y no podemos evitar hacer una pregunta:¿en qué IDE/editor desea que se integre PVS-Studio? ¿Quizás, Visual Studio Code?;)