Minimizando el tamaño de la información de depuración para la prueba en una ubicación remota

StackOverflow https://stackoverflow.com//questions/25022483

Pregunta

Estoy tratando de crear una manera de transferir la información de depuración de un proyecto C ++ a una ubicación remota para la prueba. En el ciclo de desarrollo actual, los pequeños cambios en el código requieren todo el binario (100s MB en tamaño y en su mayoría de información de depuración) para ser transferidos.

Actualmente, mi enfoque para abordar esto es dividiendo la información de depuración de los archivos de objetos (el tamaño del cual sin la información de depuración es manejable en mi conexión) usando -gsplit-enano y luego difundir los archivos de depuración contra una copia de la construir actualmente en el cuadro remoto.

El objetivo es tener un conjunto de parches para los archivos de depuración de un proyecto para que el nuevo código se pueda depurar en una ubicación remota. La conexión entre la ubicación remota y la máquina local es lenta y la minimización del tamaño de los parches es primordial, pero también debe equilibrarse con el tiempo de ejecución de la herramienta. He mirado a Bsdiff y Xdelta como soluciones potenciales y se han encontrado con un enigma donde Xdetla es rápido pero demasiado grande y BSDIFF es perfecto en términos de tamaño, pero el tiempo de ejecución y los requisitos de memoria son un poco más altos de lo que quisiera.

¿Hay una herramienta o un enfoque que me desapareció o simplemente estoy haciendo esto de la manera incorrecta? alguna alternativa a bsdiff y xdelta quizás? Sé que una herramienta como GBDServer no funcionará en esta situación debido a algunos de los requisitos que tenemos con la depuración real. ¿Podría alguna alteración de BSDIFF ayuda al rendimiento? Y, de hecho, si el enfoque que estoy usando es sólido, lo que sería una buena manera de mantener una copia de la compilación en la máquina remota alrededor de la diferencia.

¿Fue útil?

Solución

La forma más sencilla es usar la "Strip" para copiar el DEBUGINFO en un archivo ".Debug" separado y luego usar "Strip" nuevamente para eliminar la información de depuración del ejecutable que se desplegará. El manual de "Strip" explica cómo hacerlo, busque la opción "- Mantenga-depuración".

Después de hacer esto, puede decirle a GDB sobre la información de depuración por separado de varias maneras. La mejor manera es utilizar la función "ID de compilación". Esto es lo que hacen las distribuciones de Linux Modernas. Sin embargo, también hay otras formas. Hay toda una sección en el manual GDB sobre los archivos de depuración separados.

El punto clave aquí es que puede iniciar GDB en el ejecutable despojado y encontrará la información de depuración por separado automáticamente. Todos estos datos pueden ser locales, por lo que no tendrá que implementar la información de depuración.

Si aún le importa la reducción de la información de depuración, incluso cuando se realiza, puede mirar la herramienta "DWZ". Este es un compresor enano. Sin embargo, esto generalmente solo importa si planea enviar la información de depuración en algún lugar: las distribuciones lo usan para que sea más fácil de descargar la información de depuración, pero los usuarios ordinarios realmente no verán la necesidad.

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