Exibindo tempos de compilation no Visual Studio?

Nosso servidor de compilation está demorando muito para construir um de nossos projetos C ++. Ele usa o Visual Studio 2008. Existe alguma maneira de obter devenv.com para registrar 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 a verbosidade de saída (em Ferramentas / Opções / Projetos e Soluções / Construir e Executar / Detalhar Saída do Projeto MSBuild). Isso não parece ter nenhum efeito no IDE.

Ao executar o MSBuild a partir da linha de comando (e, para o Visual Studio 2008, ele 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 na solução, para que eu pudesse descobrir onde o processo de construção estava demorando.

Alternativamente, desde que nós realmente usamos o NAnt para conduzir o processo de construção (usamos o Jetbrains TeamCity), existe uma maneira de fazer com que o NAnt me diga o tempo gasto para cada etapa?

Menu FerramentasOpçõesProjetos e SoluçõesConfigurações do Projeto VC ++Construir Tempo deve funcionar.

Vá em Ferramentas → Opções → Projetos e soluções → Criar e executar → Detalhamento de saída de compilation do projeto MSBuild – defina como “Normal” ou “Detalhado”, e o tempo de compilation aparecerá na janela de saída.

Visual Studio 2012 até 2017

  • Para projetos MSBuild (por exemplo, todos os .Net-Projects):
    Clique em Tools -> Options e selecione Projects and Solutions -> Build and Run . Altere MSBuild project build output verbosity para Normal . Por isso, ele exibirá o tempo decorrido em cada projeto de solução que ele criar. Mas infelizmente não há Tempo Decorrido sobre todo o projeto. Você também verá o registro de data e hora da criação iniciada

  • Projeto C / C ++:

Clique em Tools -> Options e selecione Projects and Solutions -> VC++ Project Settings .

Alterar o Build Timing de Build Timing para Yes .

Para o Visual Studio 2012, você pode usar a extensão Build Monitor .

Se você está preso no VS2005, você pode usar o plugin vs-build-timer . Na conclusão de uma construção, mostra o tempo total gasto e um resumo (opcional) de cada uma das durações do projeto.

Aviso Legal; Eu escrevi isso. E sim, preciso criar um instalador … um dia!

Ferramentas-> Opções-> Projetos e Soluções-> Construir e Executar->

Defina “Detalhamento de saída de compilation do projeto MSBuild” de “Mínimo” para “Normal”

Como sua pergunta envolve o uso do DevEnv a partir da linha de comando, também sugiro usar o MSBuild (que pode criar arquivos .sln sem modificação).

 msbuild /fl /flp:Verbosity=diagnostic Your.sln 

msbuild /? irá mostrar outras opções úteis para o filelogger.

Se você quiser visualizar sua construção, poderá usar o IncrediBuild. IncrediBuild agora está disponível em modo standalone (não distribuído, mas para uso somente em 8 núcleos em sua máquina local) gratuitamente como parte do Visual Studio 2015 Update 1

Disclaimer: Eu trabalho para o IncrediBuild

Eu acabei aqui porque queria apenas a data e a hora incluídas na saída da compilation. Se os outros estiverem procurando algo semelhante, é tão simples quanto adicionar echo %date% %time% aos events Pré-compilation e / ou Pós-compilation no projeto, PropriedadesCompilarCriar Eventos .

Faça uma compilation primeiro e veja qual projeto está aparecendo primeiro na saída da compilation ( Ctrl + Home na janela de saída). Clique com o botão direito do mouse nesse projeto → Propriedades do ProjetoCompilarConstruir EventosPré-compilar . E echo ###########%date% %time%############# .

Assim, toda vez que você vir resultados de construção (ou durante a construção), faça Ctrl + Home na janela de saída. E em algum lugar nessa área, a hora e a data o encaram!

Ah, e você pode acabar adicionando esses detalhes a muitos projetos, pois a ordem de construção pode mudar 🙂


Eu encontrei uma solução melhor! ###

FerramentasOpçõesProjetos e soluçõesCriar e executarDetalhamento da saída de compilation do projeto MSBuild = Normal (ou acima do mínimo ). Isso adiciona o tempo no início / início da janela de saída. Ctrl + Home na janela de saída deve fazer.

Se quisermos ver quanto tempo cada projeto leva, então Projetos e SoluçõesConfigurações do Projeto VC ++Construir Tempo = sim . É aplicável a todos os projetos; “VC ++” é enganador.

Se você quiser invocar um programa externo que possa rastrear seus tempos totais de compilation, poderá usar a seguinte solução para o VS 2010 (e talvez mais antiga). O código abaixo usa o CTime por Casey Muratori. Claro que você também pode usá-lo para imprimir o tempo de compilation.

Abra o explorador de macros e cole o seguinte antes do 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 

Resposta tirada daqui e daqui .

Opções -> Projetos e Soluções -> Configurações do Projeto VC ++ -> Construir Tempo

insira a descrição da imagem aqui