PVS-Studio für JetBrains CLion:ad astra per aspera

PVS-Studio für JetBrains CLion:ad astra per aspera

Der PVS-Studio-Analyzer verfügt bereits über Plugins für solche IDEs von JetBrains wie Rider, IntelliJ IDEA und Android Studio. Irgendwie haben wir eine andere IDE verpasst - CLion. Es ist an der Zeit, Wiedergutmachung zu leisten! Aber warum brauchen Sie PVS-Studio, wenn CLion bereits den Codeanalysator hat? Welche Probleme traten während der Entwicklung auf? Lesen Sie weiter, um Antworten auf diese Fragen zu finden.

In diesem Artikel wird es keinen Tech-Hardcore geben. Dies ist eher eine Geschichte über Momente, über die wir während des Entwicklungsprozesses gestolpert sind. Entspannen Sie sich und genießen Sie Ihre Lektüre.;)

Hinweis . Übrigens stellt die JetBrains-Website die Ergebnisse verschiedener Umfragen für 2021 bereit. Die Zahlen decken die gängigsten Sprachstandards, IDEs, Tools usw. ab. Ich empfehle dringend, es zu lesen, es lohnt sich. CLion ist eine der drei am häufigsten verwendeten IDEs / Editoren. Welche IDEs für C / C++ verwenden Sie?

Warum sollte ich PVS-Studio benötigen, wenn CLion bereits über einen statischen Analysator verfügt?

Schön, dass du gefragt hast! Lassen Sie mich Ihnen mit einer kleinen Geschichte antworten.

JetBrains unterhält ein separates Twitter-Konto für CLion, wo sie verschiedene Neuigkeiten austauschen, über neue IDE-Funktionen berichten usw. Einer der Tweets war ein Beispiel dafür, wie das globale DFA funktioniert.

Das Beispiel zeigt, wie der statische Analysator es geschafft hat, die Dereferenzierung von buffer zu erkennen Nullzeiger, der von foo erhalten wurde Funktion. Andrey, unser DevRel, beschloss, das Beispiel zu modifizieren und zu sehen, wie CLion damit umgehen würde.

Ergebnis:dieselbe Warnung von CLion. PVS-Studio gibt jedoch zwei Warnungen aus:

  • V522 Möglicherweise erfolgt eine Dereferenzierung eines potenziellen Nullzeiger-'Puffers'.
  • V611 Der Speicher wurde mit dem 'new'-Operator allokiert, aber mit der 'free'-Funktion freigegeben. Erwägen Sie, die Betriebslogik hinter der Variable „buffer“ zu untersuchen.

Hier ist eine Antwort auf die Frage, die wir diskutieren:Durch die Zusammenarbeit von PVS-Studio und CLion können wir mehr Fehler beim Schreiben des Codes erkennen. CLion hebt die Fehler im laufenden Betrieb hervor, ist aber gleichzeitig in den Analysemöglichkeiten eingeschränkt. PVS-Studio hebt Fehler nicht sofort hervor, kann aber tiefere Analysen durchführen. Beachten Sie, dass PVS-Studio eine inkrementelle Analyse hat – den Modus, der nur die geänderten Dateien prüft.

Dadurch ergänzen sich die CLion-Analyse und die PVS-Studio-Analyse gegenseitig. Stellen Sie sich vor, was passieren würde, wenn wir auch die Warnungen des Compilers hinzufügen würden... :)

Zweite Geburt

Ehrlich gesagt hatten wir vor einigen Jahren einen Plugin-Prototyp für CLion. Ja, wir haben vor einiger Zeit mit der Entwicklung begonnen. Aber es war aus mehreren Gründen nicht dazu bestimmt, es zu beenden. Der Prototyp ging ins Regal.

Jetzt, da das Interesse der Benutzer immer größer wurde, haben wir uns entschieden, das zu Ende zu bringen, was wir begonnen haben. Genauer gesagt, wir hatten ein paar Möglichkeiten. Entweder modifizieren wir den bestehenden Prototypen oder fangen noch einmal von vorne an.

Spoiler:Beides war eine holprige Fahrt.

Nachdem wir die Quellen im Repository gefunden hatten, beschlossen wir, den Grad ihrer Bereitschaft zu überprüfen. Was ist, wenn es nicht viel zu beenden gibt? Überraschenderweise wurde der Code sofort kompiliert und das hat uns aufgeheitert.

Hinweis . Hallo aus der C#-Abteilung! Vor etwa einem Jahr haben wir den C#-Analyzer auf Linux und macOS portiert. Und was interessant ist, wir haben es geschafft, das PVS-Studio am ersten Tag der Arbeit an der Aufgabe unter Linux zu betreiben! Der PVS-Studio-Analyzer für C# für die Linux/macOS-Version wurde jedoch nur sechs Monate später ausgeliefert. Apropos, wie viele Nuancen im Weg stehen...

Gute Nachrichten:Code kompiliert und der Prototyp hatte bereits einige Features. Schlechte Nachrichten:Wir mussten es noch in die IDE integrieren. Gleichzeitig muss das zukünftige Plugin die Hauptfunktionen von PVS-Studio-Plugins für IDEs von JetBrains haben:Rider, IntelliJ IDEA, Android Studio. Es ist klar, dass es einige Besonderheiten geben wird. Aber im Allgemeinen sollte der Benutzer, der PVS-Studio zusammen mit verschiedenen IDEs ausprobiert, dem gleichen Szenario für die Arbeit mit dem Analysator folgen, mit den gleichen Einstellungen und der gleichen Benutzeroberfläche interagieren.

Daher haben wir versucht, das Plugin für Rider als fertige Lösung zu nehmen. Wir fanden jedoch heraus, dass wir diese Entwicklungen nicht sofort für CLion wiederverwenden konnten. Zu viele Einzelheiten.

Hier kommt eine natürliche Frage:Warum fangen Sie nicht alles von vorne an? Nehmen Sie einfach eine fertige „Vorlage“ und fügen Sie die vorhandene Funktion aus dem Prototypen darauf ein! Nun, es ist einen Versuch wert.

Wir haben eine Vorlage auf der offiziellen Website von JetBrains gefunden. Aber nachdem wir es heruntergeladen hatten, stellte sich heraus, dass das Beispiel... nicht kompiliert wurde.

Nach kurzer Recherche stellten wir fest, dass es sich um ein Sample für ältere CLion-Versionen handelte. Die API hat sich in den neuen geändert - daher die Probleme.

Interessanterweise gibt es im JetBrains-Blog eine Anleitung, die erklärt, wie man das Beispiel repariert, damit es funktioniert. Die Bearbeitungen haben dazu beigetragen, das Beispiel zu starten. Der Ansatz selbst warf jedoch eine Frage auf - warum nicht einfach eine separate Probe erstellen?

Nachdem wir den Prototyp mit der Vorlage kombiniert hatten, stellten wir fest, dass … nichts funktioniert. Vielleicht möchte man den Prototypen aufgeben und alles von Grund auf neu schreiben. Es scheint, dass wir dazu nur eine Beschreibung der API- und IDE-Interaktion benötigen. Aber nicht so schnell.

Die Ergebnisse der API-Dokumentationssuche sahen so aus:

Spaß beiseite, wir haben auf der JetBrains-Website nichts gefunden. Überhaupt. Eine zweifelhafte Idee - alle verfügbaren Klassen zu durchsuchen, in der Hoffnung, die richtige zu finden. Unsere Entwickler, die das PVS-Studio-Plugin für Rider erstellt haben, bestätigten unsere Bedenken – es gibt keine Dokumentation.

Aber wenn Sie wissen, wo Sie solche Dokumente finden können, hinterlassen Sie bitte einen Kommentar. Es wird uns und anderen nützlich sein.

Vielleicht ist es an der Zeit, mit der Eile aufzuhören, alles bei 0 anzufangen – wir müssen das, was wir haben, vervollständigen. Es mag schmerzhaft sein, aber es ist einfacher, als die Entwicklung neu zu beginnen. Die Entscheidung war richtig - nach einiger Zeit des Debuggens und Bearbeitens stellte sich heraus, dass der Prototyp im Allgemeinen bereits das tat, was benötigt wurde. Als Ergebnis haben wir es schnell geschafft, ihm beizubringen, eine Liste von Quellcodedateien aus dem Projekt zu erhalten.

Wir haben nach und nach den Code migriert, die Plugin-Funktionen wurden übernommen. Schließlich begann es zu arbeiten, wie wir es brauchten. Dies galt jedoch nur für Windows, da die Hauptentwicklung auf diesem Betriebssystem durchgeführt wurde. Ursprünglich haben wir Code für die plattformübergreifende Kompatibilität geschrieben, aber nach dem Testen unter Linux und macOS mussten wir einige Verbesserungen hinzufügen. In einigen Fällen mussten wir mehr tun, als nur den Plugin-Code zu bearbeiten. Wir mussten auch in den Kern des C++-Analyzers eintauchen. Tatsächlich war es eine mehrsprachige Aufgabe - Kenntnisse sowohl in Java als auch in C++ waren von Vorteil.

Es gab zwei wesentliche Verbesserungen:

  • der C++-Analyzer berücksichtigt jetzt Umgebungsvariablen bei der Analyse über JSON Compilation DB;
  • Außerdem lernte der Analysator, die erkannten Probleme einzeln und nicht zusammen auszugeben, nachdem er alles analysiert hatte. Dadurch konnten wir mehr Interaktivität hinzufügen – Sie müssen jetzt nicht mehr auf das Ende der Analyse warten, um mit der Fehleranalyse zu beginnen. Wir können dies während der Analyse tun.

Wie kann ich es versuchen?

Es gäbe keinen Artikel, wenn wir das Ergebnis nicht hätten. Keine Intrige hier, leider. :)

Das PVS-Studio-Plugin für CLion steht zur Verfügung.

Um es auszuprobieren, benötigen Sie:

  • Probelizenz anfordern;
  • Installieren Sie den Analyser selbst und das Plugin.

Hier können Sie eine Lizenz anfordern und den Analysator herunterladen. Folgen Sie dem Link, um eine verlängerte Testphase von 30 Tagen zu erhalten.;)

Die Plugin-Installation ist ebenfalls einfach. Die Details finden Sie im entsprechenden Dokumentationsbereich:wie Sie die Lizenz herunterladen, die Lizenz eingeben und was als nächstes zu tun ist.

Probieren Sie es aus, verwenden Sie es, schreiben Sie uns, wenn etwas nicht funktioniert. Wir freuen uns auch über alle Vorschläge zur Verbesserung der Integration.

Und wir kommen nicht umhin, eine Frage zu stellen:In welche IDE / welchen Editor soll PVS-Studio integriert werden? Vielleicht Visual Studio Code?;)