Tenemos un Makefile largo y complicado en nuestro sistema de compilación. ¿Hay una buena manera de rastrear exactamente qué objetivos se ejecutan para una invocación de marca determinada?¿Cómo rastrear los objetivos de Makefile para la resolución de problemas?
Respuesta
Uso make -d
o make --debug[=flags]
options:
‘-d’
Imprimir información de depuración además del procesamiento normal. La información de depuración dice qué archivos están siendo considerados para rehacer, qué tiempos de archivo se están comparando y con qué resultados, qué archivos necesitan rehacerse, qué reglas implícitas se consideran y cuáles se aplican, todo lo interesante sobre cómo decide make qué hacer. La opción
-d
es equivalente a‘--debug=a’
(ver a continuación).
‘--debug[=options]’
impresión Información de depuración además del procesamiento normal. Se pueden elegir varios niveles y tipos de salida. Sin argumentos, imprima el nivel "básico" de depuración. Los posibles argumentos están debajo; solo se considera el primer carácter, y los valores deben estar separados por comas o espacios.
a
(todos) Todos los tipos de salida de depuración están habilitados. Esto es equivalente a usar '-d'.
b
(básico) impresiones de depuración básicos cada objetivo que se ha encontrado para ser fuera de fecha, y si la construcción se ha realizado correctamente o no.
v
(detallado) Un nivel por encima de‘basic’
; incluye mensajes sobre qué makefiles se analizaron, requisitos previos que no necesitaban ser reconstruidos, etc. Esta opción también habilita los mensajes‘basic’
.
i
(implícita) Imprime mensajes que describen las búsquedas de reglas implícitas para cada objetivo. Esta opción también habilita los mensajes‘basic’
.
j
(trabajos) Imprime mensajes que dan detalles sobre la invocación de subcomandos específicos.
m
(makefile) De forma predeterminada, los mensajes anteriores no están habilitados al intentar volver a crear los archivos MAKE. Esta opción habilita mensajes mientras reconstruye archivos make también. Tenga en cuenta que la opción‘all’
habilita esta opción. Esta opción también habilita los mensajes‘basic’
.
Otra opción es utilizar remake - una versión parcheada de GNU Make que se suma la presentación de informes de error mejorado, la capacidad de rastrear la ejecución, y un depurador.
ElectricMake puede generar una versión XML-marcada en marcha de su registro de generación con una gran cantidad de información que pueda ayudar en esta situación:
- La totalidad de líneas de comandos para todos los comandos invocados durante la construcción (incluso aquellos que fueron marcados como comandos "silenciosos" con el modificador
@
). - El origen (archivo y número de línea) de los comandos invocados.
- Tiempo de ejecución de los comandos.
- Relaciones de dependencia entre los objetivos en la compilación.
- Relación estructural entre objetivos y marcas recursivas en la compilación.
- Archivos leídos/escritos por los comandos invocados en la compilación.
He aquí una muestra de esa producción:
<job id="J0824ab08" thread="5e72bb0" node="linbuild1-2" type="rule" name="../../i686_Linux/testmain/testmain.d" file="../config/rules.mak" line="109">
<command line="110">
<argv>echo Rebuilding '../../i686_Linux/testmain/testmain.d'</argv>
<output src="prog">Rebuilding ../../i686_Linux/testmain/testmain.d
</output>
</command>
<command line="111-114">
<argv>set -e; g++ -MM -w -DUSE_PROFILING -DUSE_LOGGING -DHAVE_UNIX -DHAVE_LINUX -I.. testmain.cpp \
| sed 's!\(testmain\)\.o[ :]*!../../i686_Linux/testmain/\1.o '../../i686_Linux/testmain/testmain.d' : !g' \
> '../../i686_Linux/testmain/testmain.d'; \
[ -s '../../i686_Linux/testmain/testmain.d' ] || touch '../../i686_Linux/testmain/testmain.d'</argv>
</command>
<opList>
<op type="read" file="/home/ericm/src/testmain/testmain.cpp"/>
<op type="read" file="/home/ericm/src/minidumper/ExceptionReport.h"/>
<op type="read" file="/home/ericm/src/util/ECAssert.h"/>
<op type="create" file="/home/ericm/i686_Linux/ecloud/testmain/testmain.d" found="0"/>
</opList>
<timing invoked="1.919926" completed="3.600491" node="linbuild1-2"/>
<waitingJobs idList="J0824ae38"/>
</job>
How to Quickly Navigate an Unfamiliar Makefile muestra un ejemplo del uso del registro de generación anotada para encontrar su camino alrededor de un makefile.
Data Mining ElectricAccelerator Annotation muestra cómo puede usar el registro de compilación anotado para generar una lista de materiales para la compilación.
ElectricMake es compatible con GNU Make, por lo que puede procesar archivos make que funcionen con GNU make.
Descargo de responsabilidad: Soy el arquitecto y desarrollador principal de ElectricAccelerator.
- 1. Makefile con objetivos múltiples
- 2. Cómo rastrear los problemas de log4net
- 3. Forzar Makefile para ejecutar script antes de construir objetivos
- 4. Objetivos comodín en un archivo Makefile
- 5. Resolución de problemas JIRA
- 6. Sugerencias para la resolución de problemas del servidor TFS lento
- 7. ¿Cómo puedo usar macros para generar múltiples objetivos/reglas de Makefile dentro de foreach? Comportamiento misterioso
- 8. CSS: la resolución de problemas de la pantalla absoluta
- 9. No hay objetivos especificados y ningún makefile encontrado
- 10. Cómo rastrear problemas/excepciones de serialización de WCF
- 11. Objetivos de MSBuild y problemas de Visual Studio 2012
- 12. Cómo solucionar problemas de resolución de CSS/Javascript
- 13. Problemas con el fin resolución constructor
- 14. ¿Cómo se cambian los objetivos en Maven?
- 15. Problemas con const resolución/no constante sobrecarga
- 16. ¿Cómo puedo mejorar el diseño de mi programa y la técnica de resolución de problemas?
- 17. ¿Cómo generar objetivos en un Makefile al iterar sobre una lista?
- 18. ¿Cómo afectan los objetos a la resolución de sobrecarga?
- 19. ¿Cómo rastrear los mensajes en Android?
- 20. Objetivos de refactorización?
- 21. ¿Cómo rastrear los redireccionamientos en Firefox?
- 22. Cómo rastrear la pérdida de memoria COM
- 23. Makefile: dependa de todos los archivos de un directorio
- 24. Cómo configurar contadores para el contador de objetivos
- 25. guía para rastrear toda la web?
- 26. Makefile para una biblioteca
- 27. ¿Cómo rastrear por categoría?
- 28. Cómo llamar a Makefile desde otro Makefile?
- 29. ¿Cómo puedo usar la sintaxis Bash en los objetos Makefile?
- 30. ¿Cómo agrupar objetivos en Phing?
¡Hola Eric! Soy un usuario de marca eléctrica. Genial para verte publicar. La cantidad de registros de depuración y opciones integradas en emake es bastante asombrosa. Gran producto, lo recomendaría. – ThePosey