Exibindo tempos de construção no Visual Studio?
-
09-06-2019 - |
Pergunta
Nosso servidor de compilação está demorando muito para criar um de nossos projetos C++.Ele usa o Visual Studio 2008.Existe alguma maneira de fazer com que o devenv.com registre o tempo necessário para construir cada projeto na solução, para que eu saiba onde concentrar meus esforços?
Hardware aprimorado não é uma opção neste caso.
Tentei definir o detalhamento de saída (em Ferramentas/Opções/Projetos e Soluções/Construir e Executar/verbosidade de saída de compilação do projeto MSBuild).Isso não parece ter nenhum efeito no IDE.
Ao executar o MSBuild na linha de comando (e, para o Visual Studio 2008, precisa ser o MSBuild v3.5), ele exibe o tempo total decorrido no final, mas não no IDE.
Eu realmente queria um relatório de tempo para cada projeto da solução, para poder descobrir onde o processo de construção estava demorando.
Como alternativa, como realmente usamos o NAnt para conduzir o processo de construção (usamos Jetbrains TeamCity), existe uma maneira de fazer com que o NAnt me diga o tempo necessário para cada etapa?
Solução
Menu Ferramentas ? Opções ? projetos e soluções ? VC ++ Configurações do projeto ? Desenvolver sincronismo deve funcionar.
Outras dicas
Vá para Ferramentas ? Opções ? Projetos e Soluções ? construir e executar ? MSBuild verbosidade de saída de compilação do projeto -. Definido para "Normal" ou "detalhes", e o tempo de compilação será exibido na janela de saída
Visual Studio 2012 até 2017
-
Para projetos MSBuild (por exemplo, todos os .NET Projetos):
CliqueTools -> Options
e selecioneProjects and Solutions -> Build and Run
. AlterarMSBuild project build output verbosity
paraNormal
. Assim, ele irá exibir o tempo decorrido em cada projeto da solução que constrói. Mas há unfortunatily há tempo decorrido Soma sobre todos projeto. Você também vai ver o Desenvolver começou Timestamp -
para o projeto C / C ++:
Clique Tools -> Options
e selecione Projects and Solutions -> VC++ Project Settings
.
Alterar Build Timing
para Yes
.
Para Visual Studio 2012 você poderia usar o Desenvolver Monitor de extensão.
Se você está preso em VS2005 você poderia usar o vs-build-temporizador plug-in . Na conclusão de uma compilação que mostra o tempo total e um (opcional) resumo de cada uma das durações do projeto.
Disclaimer; Eu o escrevi. E sim, eu preciso criar um instalador ... um dia!
Ferramentas> Opções> Projetos e Solutions> construir e executar ->
Set "MSBuild verbosidade projeto de construção de saída" de "Minimal" para "Normal"
Desde a sua pergunta envolve o uso de Devenv na linha de comando, eu também sugiro usar MSBuild (que pode construir .sln arquivos sem modificação).
msbuild /fl /flp:Verbosity=diagnostic Your.sln
msbuild /?
irá mostrar-lhe outras opções úteis para o filelogger.
Se você quiser visualizar sua compilação você pode usar IncrediBuild. IncrediBuild é agora disponível em modo autônomo (não distribuídos, mas apenas para uso em 8 núcleos em sua máquina local) gratuitamente como parte do Visual Studio 2015 Update 1
Disclaimer: Eu trabalho para IncrediBuild
Eu acabei aqui porque eu só queria a data e hora incluídos na saída da compilação. Caso os outros estar à procura de algo semelhante é tão simples como adicionar echo %date% %time%
à pré-compilação e ou eventos / pós-compilação no âmbito do projecto, Propriedades ? Compilar ? Desenvolver Eventos .
Faça uma compilação primeiro e ver qual projeto está aparecendo em primeiro lugar na saída de construção ( Ctrl + Home na janela de saída). Botão direito do mouse esse projeto ? Propriedades do projeto ? Compilar ? Build Events ? Pré-build . E echo ###########%date% %time%#############
.
Assim, cada vez que você vê resultados da construção (ou durante a compilação) fazer Ctrl + Home na janela de saída. E em algum lugar nessa área os olhares de data e hora em sua cara!
Ah, e você pode acabar adicionando esses detalhes para muitos projetos como a ordem de construção pode mudar:)
Eu encontrei uma solução melhor! ###
Ferramentas ? Opções ? Projetos e Soluções ? Criar e executar ? projeto MSBuild saída da compilação verbosidade = normal (ou acima Minimal ). Isso adiciona o tempo no início / topo da janela de saída. Ctrl + Home na janela de saída deve fazer.
Se queremos ver quanto tempo cada projeto tome então Projetos e Soluções ? VC ++ Configurações do projeto ? Desenvolver sincronismo = yes . É aplicável a todos os projetos; "VC ++" é enganosa.
Se você quiser chamar um programa externo que pode controlar seus tempos totais de compilação, você pode usar a seguinte solução para VS 2010 (e talvez mais). O código abaixo usa CTime por Casey Muratori. Claro que você também pode usá-lo para simplesmente imprimir o tempo de compilação.
Abra o explorador macro, e cole o seguinte antes 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
Eu criei uma extensão para medir os tempos de compilação e apresentar a ordem dos eventos em um gráfico: Visual Studio Desenvolver Temporizador .
Está disponível no Visual mercado estúdio e trabalha para VS2015 e VS2017.
Acho que a apresentação visual bastante útil. Além de mostrar que os projetos levam mais tempo, ele também mostra as dependências entre eles, projetos ou seja, que esperar pelos outros para completar antes de começar. Desta forma, você pode identificar gargalos na construção e ver quais dependências necessidade de quebrar a fim de aumentar a paralelização de sua construção.