PVS-Studio-Integration mit IncrediBuild Distributed Assembly System



    PVS-Studio analysiert den C / C ++ - Code und teilt dem Programmierer mit, wo sich die Fehler verstecken, oder zeigt Abschnitte des Codes an, die in Zukunft problematisch werden könnten. Wenn das zu entwickelnde Projekt groß genug ist, kann die Analyse sehr lange dauern. Um die Analyse eines großen Projekts zu beschleunigen, können Sie das IncrediBuild-Tool verwenden. Wenn Sie den PVS-Studio Analyzer und das IncrediBuild-Tool bereits installiert haben, erfahren Sie aus dem Artikel, wie Sie Freunde finden und die Analyse beschleunigen können. In Zukunft wird sich der PVS-Studio-Analysator noch enger in IncrediBuild integrieren. Aber wir wiederholen noch einmal, dass Sie den Start von PVS-Studio jetzt auf mehreren Maschinen parallelisieren können. Das ist einfach. Und im Artikel erklären wir Ihnen, wie es geht.


    Einleitung


    Jeder Entwickler, der mehr als eine halbe Stunde benötigt, um ein Projekt zu kompilieren, weiß um die Existenz des IncrediBuild- Produkts . Diese Lösung soll die Kompilierung durch verteilte Assemblierung auf mehreren Computern beschleunigen. Infolgedessen kompilieren mehrere Computer gleichzeitig das Projekt (z. B. vier). Jeder Computer kompiliert seinen Teil der Dateien, wodurch sich die Gesamtaufbauzeit um ein Vielfaches verringert.

    Vor kurzem haben PVS-Studio- Benutzer begonnen, sich mit uns in Verbindung zu setzen, um IncrediBuild-Support zu unserer Lösung hinzuzufügen. Wir haben das IncrediBuild-Entwicklungsteam kontaktiert und um Unterstützung gebeten. Das IncrediBuild-Team hat zufrieden geantwortet, und jetzt können wir PVS-Studio und IncrediBuild gemeinsam nutzen.

    Jetzt (in Version PVS-Studio 5.25) wird dem Benutzer, der PVS-Studio auf seinem Computer installiert hat, die Option „Projekt in PVS-Studio mit IncrediBuild prüfen“ im Menü seiner IDE nicht angezeigt. Es ist möglich, dass in den nächsten Versionen von PVS-Studio ein solcher Menüpunkt erscheint. Jetzt kann ein IncrediBuild-Benutzer von diesem System profitieren, wenn er PVS-Studio verwendet. Es wird nur ein wenig Magie benötigt. In diesem Artikel erfahren Sie, welche Zaubersprüche Sie wirken müssen.

    Wie funktioniert PVS-Studio?


    Welches Ziel kann eine Person haben, um PVS-Studio in IncrediBuild zu integrieren? Ich denke, es liegt auf der Hand, dass das ultimative Ziel darin bestehen sollte, den Zeitaufwand für die Analyse der Quelldateien zu verringern. Mal sehen, was eigentlich eine "Codeprüfung in PVS-Studio" ist und wie man es mit IncrediBuild "verbindet".

    IncrediBuild ist in erster Linie für die Verteilung von Assembly-Aufgaben zwischen verfügbaren Computerressourcen vorgesehen, dh zwischen den Computern der Entwickler. Was muss genau verteilt werden, wenn der statische Analysator PVS-Studio gestartet wird?

    PVS-Studio führt eine direkte Überprüfung der C / C ++ - Quelldateien mit dem Befehlszeilenprogramm PVS-Studio.exe durch. Dieses Dienstprogramm ist das Kernstück des Analysators und kommt dem C ++ - Compiler vom Prinzip her sehr nahe. Insbesondere muss PVS-Studio.exe jedes Mal ausgeführt werden, um jede Quelldatei zu überprüfen und alle Kompilierungsparameter dieser Datei sowie zusätzliche Parameter an dieses Dienstprogramm zu übergeben.

    Hinweis Der Analyzer benötigt die Kompilierungsparameter, da er die Datei zuerst vorverarbeiten muss . Dementsprechend sollte er wissen, welche Präprozessor-Direktiven deklariert sind, wo nach Header-Dateien gesucht werden soll und so weiter.

    Es ist zu beachten, dass PVS-Studio.exe nicht für die "manuelle" Verwendung vorgesehen ist - es kann nicht einfach auf ein Verzeichnis mit Quelldateien "gesetzt" werden. Um diesen Startvorgang zu automatisieren, wird das PVS-Studio-Plug-In verwendet, das in die Visual Studio-Entwicklungsumgebung integriert wird. Alternativ können Sie die PVS-Studio Standalone- Shell verwenden .

    Wenn Sie ein anderes Assemblersystem als MSBuild verwenden, kann das Ausführen von PVS-Studio.exe natürlich in andere Assemblersysteme integriert werden. Dies hebt jedoch nicht das Prinzip auf, dass PVS-Studio.exe nicht direkt vom Analysatorbenutzer verwendet werden sollte.

    Ich denke, es ist jetzt für uns klar, dass es zur Optimierung der Arbeit des Analysators erforderlich ist, die Analyseprozedur beim Starten der Prozesse von PVS-Studio.exe zu verteilen. Diese Situation ähnelt sehr der Art und Weise, wie Incredibuild mit einer normalen Projekterstellung arbeitet - es verteilt die Starts von Compilern (z. B. cl.exe) und Linkern.

    In diesem Fall "täuscht" IncrediBuild das lokale Assemblersystem. MSBuild.exe startet die Kompilierungs- und Verknüpfungsprozesse wie "lokal", und IncrediBuild verteilt die eigentliche Arbeit dieser Prozesse "unbeaufsichtigt" direkt auf die verfügbaren Rechenknoten (Computer).

    Natürlich ist es offensichtlich, dass IncrediBuild nicht darauf beschränkt ist, welche Prozesse auf Rechenknoten verteilt werden können. Wie können wir PVS-Studio damit „tricksen“? In unserem Fall müssen wir jemanden „täuschen“, der direkt am Starten von PVS-Studio.exe-Prozessen beteiligt ist.

    Als Beispiel wollen wir uns auf die Tatsache konzentrieren, dass der Benutzer ein Projekt in Microsoft Visual Studio hat, das in MSBuild erstellt wurde. Um dieses Projekt zu überprüfen, wird er höchstwahrscheinlich das PVS-Studio-Plugin für diese IDE verwenden. Das IDE-Plug-In ist Teil der IDE selbst, daher können wir jetzt den zu „trickenden“ Prozess benennen - devenv.exe - den Prozess, der genau dasselbe Microsoft Visual Studio ist.

    Angenommen, der PVS-Studio-Benutzer verwendet einen statischen Analysator, der regelmäßig auf seinem „Build-Server“ ausgeführt wird. Angenommen, das Projekt ist groß genug (mehrere tausend Quelldateien), da der Benutzer sonst keinen Sinn hat, seine Überprüfung zu beschleunigen.

    All dies bedeutet, dass der Benutzer den Test nicht jedes Mal "manuell" durch Auswahl des Menüpunkts "Check Solution" startet. Was wird er dann tun?
    "C:\Program Files (x86)\Microsoft Visual Studio
     12.0\Common7\IDE\devenv.exe" "D:\Test\OmniSample\OmniSample 
     (vs2013).sln" /command "PVSStudio.CheckSolution 
     Win32|Release|D:\Test\OmniSample\test.plog"

    Oben sehen Sie die PVS-Studio-Analyse-Startzeile für das OmniSample (vs2013) .sln-Projekt, Win32 | Release-Konfiguration. Nach Abschluss der Analyse wird der Prozess devenv.exe automatisch beendet. Das Überprüfungsprotokoll wird in D: \ Test \ OmniSample \ test.plog gespeichert. Dies ist die „Standardmethode“ für die Verwendung von PVS-Studio über die Befehlszeile, über die Sie hier mehr erfahren können.

    Auch dies ist nicht die einzige Möglichkeit, PVS-Studio zu verwenden. Lassen Sie uns der Übersichtlichkeit halber noch einmal darauf eingehen.

    Was passiert, wenn dieser Befehl ausgeführt wird? Der gestartete devenv.exe-Prozess startet die parallele Ausführung von PVS-Studio.exe-Prozessen (einer pro Quelldatei). Wie viele Passwort-Prozesse gestartet werden, wird in den Einstellungen des Analysators angegeben und kann geändert werden. Standardmäßig startet PVS-Studio so viele Prozesse gleichzeitig, wie sich logische Kerne im System befinden.

    Wie kann IncrediBuild helfen?


    Angenommen, wir haben ein Projekt mit 1000 Dateien und führen die Analyse auf einem Computer mit 4 Kernen durch. Dies bedeutet, dass der Analysator devenv.exe 250 Iterationen (jeweils 4 Prozesse) ausführen muss, um das gesamte Projekt erfolgreich zu überprüfen. Wie kann IncrediBuild uns helfen?

    Angenommen, der PVS-Studio-Benutzer verfügt über drei weitere Maschinen, und auf jeder Maschine stehen auch vier Prozessorkerne zur Verfügung. Wenn wir die Starts von PVS-Studio.exe auf diese 4 Maschinen „verteilen“ könnten, dann bräuchten wir nicht nur 250 „Iterationen“, sondern nur 62,5 (weil wir 16 Kerne haben).

    Um Analyzer-Starts auf verschiedenen Computern zu verteilen, verwenden wir das Befehlszeilendienstprogramm IBConsole :
    ibconsole /command=incredi.bat /profile=incredi.xml

    Die Datei incredi.xml sollte den folgenden Inhalt haben:

    Wie Sie sehen, „fangen“ wir die Aktivitäten von devenv ab und ermöglichen es uns, PVS-Studio-Prozesse zu „verteilen“. In der Datei incredi.bat müssen Sie die im vorherigen Artikel angegebene Startzeile für devenv.exe angeben. Vergessen Sie auch nicht, die Parallelisierungsstufe in den PVS-Studio-Einstellungen von 4 auf 16 zu ändern.

    Angenommen, IncrediBuild wurde auf 4 Computern vorinstalliert und korrekt konfiguriert. Nachdem Sie nun den Befehl ibconsole ausgeführt haben, werden Sie feststellen, dass die Starts von PVS-Studio.exe auf diese 4 Computer verteilt werden und sich die Gesamtanalysezeit verringert.

    Gleichzeitig müssen auf allen Rechnern mit Ausnahme des Rechners, auf dem dieser Befehl ausgeführt wird, nicht sowohl PVS-Studio als auch Visual Studio sowie verifizierte Quellen aufbewahrt werden. IncrediBuild übernimmt dies für Sie.

    Wie viel wird die Analysezeit verkürzt? Auf den ersten Blick könnte es so aussehen, als würde es genau viermal kleiner werden, da wir jetzt 16 und nicht 4 Kerne haben. Tatsächlich wird diese Zahl weniger als vier sein und von so vielen Faktoren abhängen. Zu diesen Faktoren gehören die Leistung von Computern, die Arbeitsbelastung mit anderen Aufgaben, die Netzwerkbandbreite und vieles mehr. Aber wir können mit Sicherheit sagen, dass es weniger als 4 sein wird, weil In jedem Fall wird ein „Flaschenhalseffekt“ beobachtet. Immerhin muss der Initiator der Analyse (devenv.exe) die Ergebnisse von PVS-Studio.exe-Starts verarbeiten. In unseren Experimenten haben wir bei Verwendung von 4 Autos eine 2,5-3,5-fache Beschleunigung erhalten.

    Wenn der Benutzer die Analyse dennoch manuell starten möchte, indem er das Element 'Check Solution' auswählt, ändern Sie einfach den Inhalt der Datei incredi.bat, indem Sie einen einfachen Aufruf an devenv.exe senden. Daraufhin wird ein Visual Studio-Fenster geöffnet, in dem Sie alle diese Aktionen ausführen und die Vorteile nutzen können verteilte Startanalysatoren. Dies ist natürlich keineswegs so praktisch, als einfach Visual Studio zu öffnen und dort den Menüpunkt „IncrediBuild einchecken“ auszuwählen, und in Zukunft wird ein solcher Punkt möglicherweise tatsächlich im PVS-Studio-Menü angezeigt.

    Fazit


    Sie können IncrediBuild und PVS-Studio bereits in aktuellen Versionen zusammen verwenden. Wenn Sie irgendwelche Schwierigkeiten haben, schreiben Sie uns und wir werden Ihnen helfen.


    Wenn Sie diesen Artikel mit einem englischsprachigen Publikum teilen möchten, verwenden Sie bitte den Übersetzungslink: Paul Eremeev. Integration von PVS-Studio in das IncrediBuild Distributed Build System .

    Haben Sie den Artikel gelesen und eine Frage?
    Oft werden unseren Artikeln die gleichen Fragen gestellt. Wir haben die Antworten hier gesammelt: Antworten auf Fragen von Lesern von Artikeln über PVS-Studio, Version 2015 . Bitte beachten Sie die Liste.

    Jetzt auch beliebt: