Pregunta

Nuestro servidor de compilación está tardando demasiado en compilar uno de nuestros proyectos de C++.Utiliza Visual Studio 2008.¿Hay alguna forma de hacer que devenv.com registre el tiempo necesario para crear cada proyecto en la solución, de modo que sepa dónde concentrar mis esfuerzos?

En este caso, mejorar el hardware no es una opción.

Intenté configurar la detalle de la salida (en Herramientas/Opciones/Proyectos y soluciones/Compilar y ejecutar/Detalle de la salida de compilación del proyecto MSBuild).Esto no parece tener ningún efecto en el IDE.

Cuando se ejecuta MSBuild desde la línea de comandos (y, para Visual Studio 2008, debe ser MSBuild v3.5), muestra el tiempo total transcurrido al final, pero no en el IDE.

Realmente quería un informe del tiempo necesario para cada proyecto de la solución, para poder determinar dónde estaba tomando su tiempo el proceso de construcción.

Alternativamente, dado que en realidad usamos NAnt para impulsar el proceso de compilación (usamos Jetbrains TeamCity), ¿hay alguna manera de hacer que NAnt me diga el tiempo necesario para cada paso?

¿Fue útil?

Solución

Menú HerramientasOpcionesProyectos y SolucionesConfiguración del proyecto VC++Tiempo de construcción Deberia trabajar.

Otros consejos

Vaya a Herramientas → Opciones → Proyectos y soluciones → Compilación y ejecución → Detalle de la salida de la compilación del proyecto MSBuild; configúrelo en "Normal" o "Detallado" y el tiempo de compilación aparecerá en la ventana de salida.

Estudio Visual 2012 hasta 2017

  • Para proyectos de MSBuild (p. ej.todos los proyectos .Net):
    Hacer clic Tools -> Options y luego seleccione Projects and Solutions -> Build and Run.Cambiar MSBuild project build output verbosity a Normal.Por lo tanto, mostrará el tiempo transcurrido en cada proyecto de solución que cree.Pero, lamentablemente, no existe una suma de tiempo transcurrido en todo el proyecto.También verá la marca de tiempo de inicio de compilación.

  • PARA Proyecto C/C++:

Hacer clic Tools -> Options y luego seleccione Projects and Solutions -> VC++ Project Settings.

Cambiar Build Timing a Yes.

Para Visual Studio 2012 puedes usar el Monitor de construcción extensión.

Si estás atascado en VS2005, puedes usar el complemento vs-build-timer.Al finalizar una construcción, muestra el tiempo total necesario y un resumen (opcional) de cada una de las duraciones del proyecto.

Descargo de responsabilidad;Yo lo escribi.Y sí, necesito crear un instalador... ¡algún día!

Herramientas->Opciones->Proyectos y soluciones->Crear y ejecutar->

Establezca "Detalle de la salida de compilación del proyecto MSBuild" de "Mínimo" a "Normal"

Dado que su pregunta implica el uso de DevEnv desde la línea de comando, también sugeriría usar MSBuild (que puede crear archivos .sln sin modificaciones).

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

msbuild /? le mostrará otras opciones útiles para el registrador de archivos.

Si desea visualizar su compilación, puede utilizar IncrediBuild.IncrediBuild ahora está disponible en modo independiente (no distribuido pero para uso solo en 8 núcleos en su máquina local) de forma gratuita como parte de Visual Studio 2015 Update 1

Descargo de responsabilidad:Trabajo para IncrediBuild

Terminé aquí porque solo quería incluir la fecha y la hora en el resultado de la compilación.Si otros buscan algo similar, es tan simple como agregar echo %date% %time% a los eventos previos a la construcción y/o posteriores a la construcción del proyecto, PropiedadesCompilarConstruir eventos.

Primero haga una compilación y vea qué proyecto aparece primero en el resultado de la compilación (Control + Hogar en la ventana de salida).Haga clic derecho en ese proyecto → Propiedades del proyectoCompilarConstruir eventosPreconstrucción.Y echo ###########%date% %time%#############.

Entonces, cada vez que veas resultados de compilación (o durante la compilación), hazlo. Control + Hogar en la ventana de salida.¡Y en algún lugar de esa área la hora y la fecha te miran a la cara!

Ah, y podrías terminar agregando estos detalles a muchos proyectos, ya que el orden de construcción puede cambiar :)


¡Encontré una solución mejor!###

HerramientasOpcionesProyectos y SolucionesConstruir y ejecutarDetalle de la salida de compilación del proyecto MSBuild = Normal (o superior Mínimo).Esto agrega la hora al principio/parte superior de la ventana de salida. Control + Hogar en la ventana de salida debería funcionar.

Si queremos ver cuánto tiempo lleva cada proyecto, entonces Proyectos y SolucionesConfiguración del proyecto VC++Tiempo de construcción = sí.Es aplicable a todos los proyectos;"VC++" es engañoso.

Si desea invocar un programa externo que pueda realizar un seguimiento de los tiempos totales de compilación, puede utilizar la siguiente solución para VS 2010 (y quizás versiones anteriores).El siguiente código utiliza CTime de Casey Muratori.Por supuesto, también puedes usarlo para simplemente imprimir el tiempo de construcción.

Abra el explorador de macros y pegue lo siguiente 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

Respuesta tomada de aquí y aquí.

Opciones -> Proyectos y soluciones -> Configuración del proyecto VC++ -> Tiempo de compilación

enter image description here

Creé una extensión para medir los tiempos de construcción y presentar el orden de los eventos en un gráfico: Temporizador de compilación de Visual Studio.

enter image description here

Está disponible en Visual Studio Market y funciona para VS2015 y VS2017.

La presentación visual me parece bastante útil.Además de mostrar qué proyectos tardan más, también muestra las dependencias entre ellos, es decir,proyectos que esperan a que otros los completen antes de comenzar.De esta manera, puede detectar cuellos de botella en la compilación y ver qué dependencias deben romperse para aumentar la paralelización de su compilación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top