Anzeige der Bauzeiten in Visual Studio?
-
09-06-2019 - |
Frage
Unser Build-Server dauert zu lange einen unserer C ++ Projekte zu bauen. Es verwendet Visual Studio 2008. Gibt es eine Möglichkeit devenv.com zu bekommen, die Zeit jedes Projekt in der Lösung zu bauen genommen zu protokollieren, so dass ich weiß, wo meine Bemühungen konzentrieren?
Verbesserte Hardware ist keine Option in diesem Fall.
Ich habe versucht, die Ausgabe Ausführlichkeit Einstellung (unter Extras / Optionen / Projekte und Lösungen / Build und Run / MSBuild Projekt Build-Ausgabe Ausführlichkeit). Dies scheint keine Auswirkungen in der IDE zu haben.
Wenn MSBuild von der Befehlszeile ausgeführt wird (und für Visual Studio 2008, braucht es MSBuild v3.5 zu sein), es zeigt die Gesamtzeit am Ende abgelaufen ist, aber nicht in der IDE.
Ich wollte wirklich eine zeit genommen Bericht für jedes Projekt in der Lösung, so dass ich herausfinden konnte, wo der Build-Prozess seine Zeit nahm.
Alternativ kann, da wir NAnt tatsächlich nutzen den Build-Prozess zu fahren (wir benutzen Jetbrains Teamcity), ist es eine Möglichkeit, NAnt, um mich für jeden Schritt unternommen, um die Zeit zu erzählen?
Lösung
Menü Extras → Optionen → Projekte und Lösungen → VC ++ Projekteinstellungen → Build-Timing sollte funktionieren.
Andere Tipps
auf Extras → Optionen → Projekte und Lösungen → Erstellen und Ausführen → MSBuild-Projekt Build-Ausgabe Ausführlichkeit -. Auf „Normal“ oder „Detailed“, und die Build-Zeit wird im Ausgabefenster erscheint
Visual Studio 2012 bis 2017
-
Für MSBuild Projekte (zum Beispiel alle .NET-Projekte):
Klicken SieTools -> Options
und dannProjects and Solutions -> Build and Run
wählen. ÄndernMSBuild project build output verbosity
Normal
. So wird es Abgelaufene Zeit in jede Lösung Projekt zeigt sie baut. Aber es gibt keine unfortunatily Abgelaufene Zeit Summe über alle Projekt. Sie sehen auch die Build-gestartet Zeitstempel -
für C / C ++ Projekt:
Klicken Sie Tools -> Options
und wählen Sie dann Projects and Solutions -> VC++ Project Settings
.
Ändern Build Timing
Yes
.
Für Visual Studio 2012 können Sie den -Monitor Bauen Erweiterung.
Wenn Sie auf VS2005 stecken könnten Sie die verwenden vs-build-Timer-Plugin . Bei Beendigung eines Build zeigt es die gesamte Zeit genommen und eine (optional) Zusammenfassung der einzelnen Projektlaufzeiten.
Haftungsausschluss; Ich schrieb es. Und ja, ich brauche einen Installer zu erstellen ... einen Tag!
Extras-> Optionen-> Projekte und Solutions-> Erstellen und Ausführen ->
Stellen Sie "MSBuild Projekt Build-Ausgabe Ausführlichkeit" von "Minimal" auf "Normal"
Da Ihre Frage devenv von der Kommandozeile beinhaltet die Verwendung, würde ich auch mit vorschlagen MSBuild (die Dateien ohne Modifikation bauen SLN kann).
msbuild /fl /flp:Verbosity=diagnostic Your.sln
msbuild /?
werden Sie andere nützliche Optionen für die Filelogger zeigen.
Wenn Sie Ihren Build visualisieren Sie IncrediBuild verwenden können. IncrediBuild ist jetzt auch in der Standalone-Modus (nicht verteilt, sondern nur für die Verwendung auf 8 Kerne auf dem lokalen Computer) kostenlos als Teil von Visual Studio 2015 Update 1
Disclaimer: Ich arbeite für IncrediBuild
ich hier gelandet, weil ich nur das Datum und die Zeit, die in der Build-Ausgabe wollte. Sollten andere für ähnlich etwas gesucht werden, es ist so einfach wie das Hinzufügen echo %date% %time%
zum Pre-Build und / oder Post-Build-Ereignisse unter Projekt, Eigenschaften → Compile → Build Event .
Sie einen Build erster und sehen, welches Projekt zuerst in der Build-Ausgabe erscheinen ( Strg + Home im Ausgabefenster). Rechtsklick auf das Projekt → Projekteigenschaften → Compile → Build Events → Pre-build . Und echo ###########%date% %time%#############
.
Also jedes Mal, wenn Sie Ergebnisse sehen bauen (oder während des Build) tun Strg + Home im Ausgabefenster. Und irgendwo in diesem Bereich der Zeit und das Datum Blicken auf Ihrem Gesicht!
Oh, und Sie könnten am Hinzufügen dieser Details zu viele Projekte beenden, wie die Build-Reihenfolge ändern können:)
Ich fand eine bessere Lösung! ###
Extras → Optionen → Projekte & Lösungen → Build und Run → MSBuild Projekt Build-Ausgabe Ausführlichkeit = normal (oder höher Minimal ). Dadurch wird die Zeit am Anfang / Anfang der Ausgabefenster. Strg + Home in dem Ausgabefenster tun soll.
Wenn wir sehen wollen, wie viel Zeit jeder Projekte nehmen dann Projekte & Lösungen → VC ++ Projekteinstellungen → Build-Timing = yes . Sie gilt für alle Projekte; "VC ++" ist irreführend.
Wenn Sie ein externes Programm aufrufen wollen, dass Ihre Gesamt Bauzeiten verfolgen können, können Sie die folgende Lösung für VS 2010 (und vielleicht auch älter) verwenden. Der folgende Code verwendet CTime von Casey Muratori. Natürlich kann man es auch einfach verwenden, um die Build-Zeit zu drucken.
Öffnen Sie den Makro-Explorer auf, und fügen Sie den folgenden vor End Module
:
Dim buildStart As Date
Private Sub RunCtime(ByVal StartRatherThanEnd As Boolean)
Dim Arg As String
Dim psi As New System.Diagnostics.ProcessStartInfo("ctime.exe")
If StartRatherThanEnd Then
psi.Arguments = "-begin"
Else
psi.Arguments = "-end"
End If
psi.Arguments += " c:\my\path\build.ctm"
psi.RedirectStandardOutput = False
psi.WindowStyle = ProcessWindowStyle.Hidden
psi.UseShellExecute = False
psi.CreateNoWindow = True
Dim process As System.Diagnostics.Process
process = System.Diagnostics.Process.Start(psi)
Dim myOutput As System.IO.StreamReader = process.StandardOutput
process.WaitForExit(2000)
If process.HasExited Then
Dim output As String = myOutput.ReadToEnd
WriteToBuildWindow("CTime output: " + output)
End If
End Sub
Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin
WriteToBuildWindow("Build started!")
buildStart = Date.Now
RunCtime(True)
End Sub
Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone
Dim buildTime = Date.Now - buildStart
WriteToBuildWindow(String.Format("Total build time: {0} seconds", buildTime.ToString))
RunCtime(False)
End Sub
Private Sub WriteToBuildWindow(ByVal message As String)
Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
Dim ow As OutputWindow = CType(win.Object, OutputWindow)
If (Not message.EndsWith(vbCrLf)) Then
message = message + vbCrLf
End If
ow.OutputWindowPanes.Item("Build").OutputString(message)
End Sub
Ich habe eine Erweiterung geschaffen, um die Bauzeiten und präsentieren die Reihenfolge der Ereignisse in einem Diagramm zu messen: Visual Studio Build-Timer .
Es ist auf Visual Studio Marktplatz und arbeitet für VS2015 und VS2017.
Ich finde die visuelle Darstellung sehr hilfreich. Neben zeigen, welche Projekte länger dauern, es zeigt auch Abhängigkeiten zwischen ihnen, das heißt Projekte, die für die anderen warten zu beenden, bevor sie beginnen. Auf diese Weise können Engpässe in der Build erkennen und sehen, welche Abhängigkeiten zu brechen, um brauchen die Parallelisierung des Builds zu erhöhen.