En C++, sé que el compilador puede elegir inicializar objetos estáticos en el orden que elija (sujeto a algunas restricciones) y que, en general, no puede elegir o determinar el orden de inicialización estático.¿Determina el orden de inicialización estático después de la compilación?
Sin embargo, una vez que se compila un programa, el compilador debe haber tomado una decisión sobre el orden en que se inicializarán estos objetos. ¿Hay alguna manera de determinar, a partir de un programa compilado con símbolos de depuración, en qué orden estática? Se llamarán constructores?
El contexto es el siguiente: Tengo un programa considerable que de repente se segfaulting antes de main() cuando está construido bajo una nueva cadena de herramientas. O bien, este es un problema de orden de inicialización estática, o es algo incorrecto con una de las bibliotecas que está cargando. Sin embargo, cuando depuro con gdb, la ubicación del bloqueo simplemente se informa como una dirección sin procesar, sin ninguna información simbólica o traza inversa. Me gustaría decidir cuál de estos dos problemas es colocando un punto de interrupción en el constructor del primer objeto estáticamente inicializado, pero no sé cómo decir qué objeto es ese.
¿Ha intentado recompilar con la bandera "-g3"? Eso debería incluir muchos símbolos de depuración para que trabajes. –
Es el enlazador que determina el orden final en todas las unidades de compilación. Creo que g ++ tiene algunos pragmas que pueden ayudar a definir el orden. –
La respuesta es altamente específica de la plataforma y ha logrado mantener su plataforma en secreto. Por favor, muéstralo, así como la versión de GDB que has usado. –