2010-11-27 13 views
8

Me estoy cansando de tener que mantener mi código fuente intacto hasta que termine de depurarlo. Cada vez que cambio mi código, GDB comienza a quejarse al respecto:Incrustar el código fuente de un programa en su binario usando GCC para uso posterior de GDB

advertencia: el archivo fuente es más reciente que el ejecutable.

hasta que lo vuelva a compilar, lo que no siempre se puede hacer rápidamente. Creo que sería genial si fuera posible incluir el código fuente de un programa en su binario y hacer que GDB lo use en lugar de su versión actualizada.

¿Alguien podría sugerir una forma de hacerlo? ¿Se ha implementado esto en absoluto?

Respuesta

3

GCC es de código abierto; puede solucionarlo. Por supuesto, probablemente tenga que revisar LD para manejar la información correctamente, y definitivamente tendría que arreglar GDB para usar la fuente incrustada. Utilizaría un formato no estándar para la información de depuración, por lo que probablemente tendría que modificar las otras herramientas que manipulan los archivos de objeto.

Entonces, la posibilidad está ahí. Pero es más fácil hacer lo mismo que todos los demás en el mundo y mantener su fuente hasta que haya terminado de depurarlo. Normalmente, puede mantener ejecutándose una sola sesión de GDB mientras reconstruye el ejecutable varias veces, si es necesario. Y, por lo general, es más fácil depurar la versión actual del código en lugar de la versión de ayer. Si necesita depurar la versión de ayer, necesita el código de ayer disponible (tiene un buen VCS en su lugar, ¿no?) Para que pueda ver lo que realmente estaba mal con el código de ayer en lugar de la versión modificada de hoy del código .

Te daré crédito por hacer la pregunta, se necesita un poco de pensamiento lateral para llegar a la idea. ¡Bien hecho! Pero en la práctica su sugerencia es decididamente no trivial de implementar.

+0

Seguramente no tengo suficiente tiempo/habilidad/paciencia/necesidad de implementarlo como una nueva característica, sin embargo, estoy bastante sorprendido de que aún no se haya implementado. Aunque estoy de acuerdo en que en la mayoría de los casos no debería ser necesario, a veces puede ser de alguna utilidad. Por ejemplo, inicio un depurador con mi viejo binario para descubrir qué está mal. Localizo el origen del problema, pero luego, justo después de haber escrito la mitad del código y de guardarlo, la sesión de GDB falla debido a un simple error tipográfico. ¡Ahora tendré que arreglar el código sin la ayuda del depurador o retrotraerlo, reconstruir el programa, ejecutar GDB y deshacer los cambios! – undercat

+0

@vovick: hay dos razones al menos. Una es histórica: los copiosos recursos disponibles ahora no siempre estaban disponibles, y las personas sentían (probablemente con razón) que era mejor no saturar el código depurable con la fuente real porque requeriría demasiado espacio de disco y memoria. En los viejos tiempos, era bastante difícil incluir el programa en la memoria, y mucho menos agregar la información de depuración adicional, etc. El otro es práctico: a las personas no les resulta tan difícil mantener disponible la fuente relevante como para justificar el esfuerzo para hacer lo que sugieres. –

Cuestiones relacionadas