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?

Foi útil?

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):
    Clique Tools -> Options e selecione Projects and Solutions -> Build and Run. Alterar MSBuild project build output verbosity para Normal. 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

Resposta retirado aqui e aqui .

Opções -> Projetos e Soluções -> VC ++ Project Settings -> Build sincronismo

enter descrição da imagem aqui

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 .

enter descrição da imagem aqui

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top