Der Sommer ist nicht nur eine Ferienzeit, sondern auch eine Zeit fruchtbarer Arbeit. Sonnige Tage sind so energiegeladen, dass sie genug Energie für späte Spaziergänge und umfangreiche Code-Commits haben. Die zweite Sommerversion von PVS-Studio 7.04 erwies sich als ziemlich umfangreich, daher machen wir Sie auf eine Pressemitteilung aufmerksam, in der wir über alles sprechen werden.
PVS-Studio ist ein Tool zum Erkennen von Fehlern und potenziellen Schwachstellen im Quellcode von Programmen, die in C, C ++, C # und Java geschrieben wurden. Es läuft unter Windows, Linux und MacOS.
Die Fähigkeiten des Analysators werden durch die umfangreiche
Sammlung von Fehlern im Code demonstriert, die wir bei der
Überprüfung verschiedener Open-Source-Projekte gefunden haben.
Wir machen Sie auf einen Überblick über die neuen Funktionen aufmerksam, die in der Version von PVS-Studio 7.04 enthalten sind.
Suchen Sie nach Dateien mit Copyleft-Lizenzen
Entwickler, von denen sie den Code einfach nicht erhalten, arbeiten an der Aufgabe. Eine beliebte Quelle für Copy-Paste-Code ist die Stackoverflow-Site und dergleichen. Es kann jedoch Situationen geben, in denen der Programmierer den Code aus dem Open Source-Projekt übernimmt und die Lizenzanforderungen nicht überprüft. Somit können mehrere Dateien aus dem Open Source-Projekt mit Copyleft-Lizenz, d. H. Verpflichtung, den gesamten Projektcode zu veröffentlichen. In Unternehmen mit einer großen Anzahl von Mitarbeitern ist dies schwer nachzuverfolgen, und Risiken und Probleme können aufgrund solcher Maßnahmen schwerwiegend sein. In PVS-Studio für alle unterstützten Sprachen (C, C ++, C #, Java) wurden Diagnosen angezeigt, mit denen solche Dateien leichter gefunden werden können.
Diagnosenummern für verschiedene Sprachen:
Lassen Sie uns diese Diagnosen genauer betrachten und analysieren, wofür sie gemacht sind. Ein Beispiel für einen Kommentar, zu dem der Analysator eine Warnung ausgibt:
Für geschlossene Projekte
Wenn Sie einem geschlossenen Projekt eine Datei mit einer solchen Lizenz (in diesem Fall GPL3) hinzufügen, muss der Rest des Quellcodes aufgrund der Art dieser Lizenz geöffnet werden.
Diese Art der Copyleft-Lizenz wird als "
virale " Lizenz bezeichnet, da sie auf andere Projektdateien übertragen werden kann. Das Problem ist, dass durch die Verwendung mindestens einer Datei mit einer ähnlichen Lizenz in einem geschlossenen Projekt automatisch der gesamte Quellcode geöffnet wird und Sie verpflichtet sind, ihn zusammen mit den Binärdateien zu verteilen.
Diagnostics sucht nach den folgenden "viralen" Lizenzen:
- AGPL-3.0
- GPL-2.0
- GPL-3.0
- LGPL-3.0
Es gibt die folgenden Optionen, die Sie ausführen können, wenn Sie die Verwendung von Dateien mit Copyleft-Lizenz in einem geschlossenen Projekt feststellen:
- Weigern Sie sich, diesen Code (Bibliothek) in Ihrem Projekt zu verwenden.
- Ersetzen Sie die verwendete Bibliothek.
- Machen Sie Ihr Projekt offen.
Für Open Source Projekte
Wir verstehen, dass diese Diagnose für Open Source-Projekte nicht geeignet ist. Das PVS-Studio-Team trägt zur Entwicklung offener Projekte bei, hilft bei der Behebung von
Fehlern und bietet kostenlose
Lizenzoptionen . Bei unserem Produkt handelt es sich jedoch um eine B2B-Lösung. Daher ist diese Diagnose standardmäßig aktiviert.
Wenn Ihr Code unter einer der oben genannten Copyleft-Lizenzen verteilt ist, können Sie diese Diagnose auf folgende Weise deaktivieren (für C \ C ++ ist es V1042):
- Wenn Sie das PVS-Studio-Plug-In für Visual Studio verwenden, können Sie unter Optionen> PVS-Studio> Erkennbare Fehler> 1.Allgemeine Analyse> V1042 die Anzeige dieser Diagnose im Ausgabefenster des Analysators deaktivieren. Der Nachteil dieser Methode ist, dass der Fehler beim Speichern (oder wenn die Analyse über die Befehlszeile gestartet wurde) weiterhin in das Analysatorprotokoll geschrieben wird. Wenn Sie ein solches Protokoll auf einem anderen Computer öffnen oder die Analyseergebnisse in ein anderes Format konvertieren, werden möglicherweise auf diese Weise deaktivierte Meldungen erneut angezeigt.
- Wenn Sie das Plugin nicht verwenden, die Regel für den gesamten Befehl blockieren oder seine Meldungen aus dem Analysebericht entfernen möchten, können Sie den Kommentar "// - V :: 1042" zur Konfigurationsdatei (.pvsconfig) oder zu einer der globalen Headerdateien hinzufügen. Für Entwickler, die Visual C ++ verwenden, ist es eine gute Option, diesen Kommentar zur Datei stdafx.h hinzuzufügen. Dieser Kommentar weist den Analysator an, die V1042-Diagnose zu deaktivieren. Weitere Informationen zum Deaktivieren der Diagnose mithilfe von Kommentaren finden Sie in der Dokumentation .
- Wenn das Dienstprogramm Plog Converter zum Konvertieren von Berichten verwendet wird, können Sie die Diagnose mit dem Schalter "-d" deaktivieren.
Für C # bedeutet dies V3144 bzw. für Java - V6071.
Hinzufügen zur Liste gefährlicher Lizenzen
Wenn Sie auch die Arten von "viralen" Lizenzen kennen, die das Tool derzeit nicht erkennt, können Sie uns dies über das
Feedback-Formular mitteilen. Und wir werden ihre Identifikation in der nächsten Version hinzufügen.
Neue Diagnose
C, C ++ (Allgemein)
- V1040 . Möglicher Tippfehler in der Schreibweise eines vordefinierten Makronamens.
- V1041 . Das Klassenmitglied wird mit einer baumelnden Referenz initialisiert.
- V1042 . Diese Datei ist mit einer Copyleft-Lizenz gekennzeichnet, für die Sie den abgeleiteten Quellcode öffnen müssen.
- V1043 . Eine globale Objektvariable wird im Header deklariert. In allen Übersetzungseinheiten, die diese Header-Datei enthalten, werden mehrere Kopien davon erstellt.
Ich möchte auch die Diagnose mit der Nummer
V1040 erwähnen . Bereits im Beta-Status hat sie in der Bibliothek des bekannten CMake-Projekts einen interessanten Fehler gefunden:
V1040 Möglicher Tippfehler bei der Schreibweise eines vordefinierten
Makronamens . Das Makro '__MINGW32_' ähnelt '__MINGW32__'. winapi.h 4112
#if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif
Hier machten sie einen Tippfehler im Namen
__MINGW32_ . Am Ende fehlt ein Unterstrich. Wenn Sie nach Code mit diesem Namen suchen, können Sie sicherstellen, dass das Projekt tatsächlich die Version mit zwei Unterstrichen auf beiden Seiten verwendet:
Sie können sich alle im CMake-Projekt gefundenen Fehler im Artikel "
CMake: Der Fall, in dem die Qualität des Codes für das Projekt unentschuldbar ist" ansehen .
C, C ++ (MISRA)
- V2551 . Misra. Die Variable sollte in einem Bereich deklariert werden, der ihre Sichtbarkeit minimiert.
- V2552 . Misra. Ausdrücke mit dem zugrunde liegenden Typ enum sollten Werte haben, die den Enumeratoren der Enumeration entsprechen.
- V2553 . Misra. Der unäre Minusoperator sollte nicht auf einen Ausdruck vom Typ ohne Vorzeichen angewendet werden.
- V2554 . Misra. Ausdrücke, die Inkrement (++) oder Dekrement (-) enthalten, sollten keine anderen Nebenwirkungen haben.
- V2555 . Misra. Falscher Verschiebungsausdruck.
- V2556 . Misra. Verwendung eines Zeigers auf FILE, wenn der zugehörige Stream bereits geschlossen wurde.
- V2557 . Misra. Der Operand des Operators sizeof () sollte keine anderen Nebenwirkungen haben.
C #
- V3140 Eigenschaftszugriffsberechtigte verwenden unterschiedliche Hintergrundfelder.
- V3141 . Der Ausdruck unter 'throw' ist eine potenzielle Null, die zu NullReferenceException führen kann.
- V3142 . Nicht erreichbarer Code erkannt. Möglicherweise liegt ein Fehler vor.
- V3143 . Der Parameter 'value' wird in einem Eigenschaftssetter neu geschrieben und danach nicht mehr verwendet.
- V3144 . Diese Datei ist mit einer Copyleft-Lizenz gekennzeichnet, für die Sie den abgeleiteten Quellcode öffnen müssen.
- V3145. Unsichere Dereferenzierung eines WeakReference-Ziels. Das Objekt könnte Müll gesammelt worden sein, bevor auf die Eigenschaft 'Target' zugegriffen wurde.
Ebenfalls im C # -Analysator wurde die Berechnung von Rückgabe- / Schreibwerten aus Methoden zum Abrufen und Festlegen von Eigenschaften und asynchronen Methoden hinzugefügt.
Wir arbeiten derzeit daran, die Verfolgung von Feldwerten und Eigenschaften von Objekten bei der Übergabe an Methoden sowie die Verfolgung des Inhalts von Tupeln zu verbessern. Diese Verbesserungen werden in der nächsten Version des Analysators verfügbar sein.
Java
- V6068 Verdächtige Verwendung der BigDecimal-Klasse.
- V6069 Vorzeichenlose Rechtsverschiebung des negativen Wertes 'Byte' / 'Kurz'.
- V6070 Unsichere Synchronisation für ein Objekt.
- V6071 Diese Datei ist mit einer Copyleft-Lizenz gekennzeichnet, für die Sie den abgeleiteten Quellcode öffnen müssen.
SonarQube 7.9 LTS
Lang erwartete Veröffentlichung
Seit der letzten Veröffentlichung der LTS-Version von SonarQube 6.7 sind fast zwei Jahre vergangen. Eine neue Version wurde mit besonderem Eifer erwartet, beginnend mit SQ 7.x, und als die LTS-Version stattfand, begannen die Benutzer, aktiv darauf umzusteigen, was verschiedene Probleme verursachte. SQ 7.9.1 LTS wurde bald mit kleineren Korrekturen veröffentlicht, und Plugin-Entwickler von Drittanbietern bereiteten auch Patches vor.
Glücklicherweise gab es im PVS-Studio-Plugin nur ein kleines Problem im Zusammenhang mit dem Übergang zu Java 11, das wir schnell behoben haben, und unsere Kunden wechselten sofort zu einer funktionierenden Version.
Wir haben auch die Kompatibilität mit älteren Versionen von SonarQube beibehalten, und die Liste der unterstützten Versionen sieht jetzt folgendermaßen aus:
SonarQube 6.7 LTS und höher .
Weitere Sprach-Plugins werden unterstützt
Das PVS-Studio-Plugin konvertiert nur die Analyseergebnisse in das Format der SonarQube-Datenbank. Mit anderen Worten, es lädt einfach die PVS-Studuio-Analyseergebnisse in SQ. Für den vollständigen Betrieb des SonarScanner-Dienstprogramms müssen jedoch Plug-Ins für Programmiersprachen installiert sein. Wir haben nicht begonnen, das zu entwickeln, was bereits vorhanden ist, daher fügen wir einfach Unterstützung für bereits vorhandene beliebte Plugins hinzu. In dieser Version haben wir die Kompatibilität mit den Sprach-Plugins Sonar C Community und SonarCFamily hinzugefügt.
Die gesamte Liste der unterstützten Sprach-Plugins sieht folgendermaßen aus:
Zum Herunterladen der PVS-Studio-Analyseergebnisse reicht es aus, mindestens ein Plugin aus dieser Liste zu installieren. Die meisten Benutzer müssen nur die Sonar C ++ Community, SonarC # oder SonarJava installieren. Für spezifischere Projekte werden möglicherweise andere Plugins benötigt.
Bei der Auswahl von Plugins muss berücksichtigt werden, dass Community-Plugins nicht mit SonarCFamily kompatibel sind. Wenn Sie jedoch nur die SonarQube Community Edition verwenden, tritt ein solches Problem nicht auf.
Neue Einstellungsseite
Bisher konnten Sie den Analysator nur über die Konfigurationsdatei
sonar-project.properties konfigurieren. Es gibt keine Beschwerden über diese Methode. Es ist sehr praktisch und wird in 99% der Fälle verwendet, aber wir haben zusätzlich die Einstellungsseite unter
Administration> Konfiguration> PVS-Studio auf dem SonarQube-Server erstellt, weil In einigen Szenarien ist es auch bequem zu verwenden.
Die Einstellungsseite sieht folgendermaßen aus:
Wenn Sie die Einstellungen auf zwei Arten
vornehmen , haben die in der Datei
sonar-project.properties angegebenen
Vorrang .
Plugin für IntelliJ IDEA
Die Versionen der neuen Versionen von IntelliJ IDEA und PVS-Studio unterscheiden sich in den Daten. Vor kurzem gab es eine Situation, in der IntelliJ IDEA 192 * veröffentlicht wurde, das PVS-Studio-Plugin jedoch nicht darauf installiert war. In dieser Version haben wir die Unterstützung für die neueste Version von IntelliJ IDEA hinzugefügt und Verbesserungen vorgenommen, um ähnliche Probleme in Zukunft zu vermeiden.
Plugins für Jenkins
PVS-Studio PluginDas PVS-Studio Plugin dient zum Veröffentlichen der Ergebnisse des PVS-Studio-Analysators im kontinuierlichen Integrationssystem von Jenkins im HTML-Format. Bisher war dieses Plugin nur für Windows-Benutzer verfügbar rief den Berichtskonverter automatisch auf und tat es nur für Windows. In PVS-Studio 7.04 unterstützt das Plugin nur HTML-Berichte, die in einem separaten Schritt generiert werden müssen. Dadurch konnte das Plug-In jedoch plattformübergreifend sein.
Warnungen NG PluginFür Jenkins gibt es ein nützliches
Plugin-Plugin für
Warnungen der nächsten Generation zum Anzeigen von Analyseergebnissen aus verschiedenen Tools. Kürzlich haben wir die Unterstützung für PVS-Studio hinzugefügt. Die Möglichkeit, PVS-Studio-Analyseergebnisse mit diesem Plugin zu laden, wurde in Version
6.0.0 verfügbar, deren Veröffentlichung mit der Veröffentlichung von PVS-Studio 7.04 zusammenfiel:
Weitere Verbesserungen
PVS-Studio_CmdEine spezielle Betriebsart - Anmeldeinformationen - wurde zu
PVS-Studio_Cmd.exe hinzugefügt . In diesem Modus können Sie eine Einstellungsdatei erstellen und Lizenzinformationen eingeben, ohne eine GUI-Oberfläche zu verwenden (z. B. ein Plug-In für Visual Studio oder das Dienstprogramm C und C ++ Compiler Monitoring UI). Dieser Modus ist besonders relevant, wenn er auf dem Build-Server (wo die GUI-Dienstprogramme möglicherweise nicht beschrieben werden), in Containern und in Cloud-Lösungen integriert ist.
Analyse unwirklicher MotorprojekteDie Option
AutoloadUnrealEngineLog wurde dem PVS-Studio-Plug-In für Visual Studio hinzugefügt, mit dessen
Hilfe Sie den Analysebericht nach dem Bestehen der Analyse automatisch in das PVS-Studio-Ausgabefenster laden können. Ohne diese Option muss das Protokoll manuell über das Plugin-Menü geladen werden.
Außerdem wurden im Dokumentationsabschnitt "
Testen von unwirklichen Engine-Projekten " Änderungen an Standard-Assembly-Skripten beschrieben, die die Assembly und Analyse in einer Aktion ermöglichen. Ohne Änderung der Skripte (beim Hinzufügen des
Flags -StaticAnalyzer = PVSStudio zu den
Startargumenten ) wird nur das Projekt analysiert, ohne es zu
erstellen .
CLMonitorFür das Dienstprogramm CLMonitor wurde die Möglichkeit hinzugefügt, Compiler-Starts für einen bestimmten Prozess zu verfolgen. Auf diese Weise können Sie die Starts von Compilern verfolgen, die sich nur auf ein bestimmtes Projekt beziehen, selbst wenn Sie mehrere Projekte parallel erstellen. Um in diesem Modus zu arbeiten, werden die Flags
--parentProcessID% PID% (CLMonitor überwacht untergeordnete Prozesse in Bezug auf die angegebenen) und
--attach (CLMonitor überwacht untergeordnete Prozesse in Bezug auf die aktuelle Konsole).
pvs-studio-analyzerDas
Flag --ignore-ccache wurde dem Dienstprogramm pvs-studio-analyzer hinzugefügt, mit dem Projekte unter Linux und macOS getestet werden können:
pvs-studio-analyzer analyze ... --ignore-ccache ...
Wenn das Dienstprogramm
ccache in der Projektassembly verwendet wird, arbeitet PVS-Studio im inkrementellen Analysemodus. Verwenden Sie dieses Flag, um das Projekt vollständig zu überprüfen, ohne den
Cache des
Ccache- Dienstprogramms zu
löschen .
Sitelinks
Um über unsere neuen Veröffentlichungen auf dem Laufenden zu bleiben, laden wir Sie ein, uns zu abonnieren:
- Twitter: pvsstudio_rus
- VKontakte: PVS-Studio-Analysegerät
- Facebook: @StaticCodeAnalyzer
- Instagram: @pvsstudio_rus
- Telegramm: PVS-Studio rus
- RSS: viva64-blog-de
PVS-Studio:
- Produktseite
- Herunterladen
- Die Dokumentation
- Kunden

Wenn Sie diesen Artikel einem englischsprachigen Publikum zugänglich machen möchten, verwenden Sie bitte den Link zur Übersetzung: Svyatoslav Razmyslov.
PVS-Studio 7.04 .