Archivo de mayo de 2009

Backtraces en C

Jueves, 7 de mayo de 2009 por

El otro día me entró la curiosidad de cómo podía saber al ejecutar un programa donde se producía un segmentation fault, por ejemplo, que es bastante común en mi caso :-) con ayuda de algún compañero de trabajo encontramos la página de GNU en la que se refieren a los Backtraces.

Para usarlo, hay que poner un #include <execinfo.h> y las opciones -g y -rdynamic, si utilizas el compilador y el linker de GNU. De esta manera se guardan en el ejecutable todos los símbolos. Aumenta el tamaño de los ejecutables, con lo que conviene sólo usarlo mientras se hacen pruebas. Esta librería tiene tres funciones:

  • int backtrace (void **buffer, int size): Rellena buffer con los size punteros obtenidos del backtrace del thread en ejecución. Devuelve el número de punteros devueltos, menor o igual que size.
  • char ** backtrace_symbols (void *const *buffer, int size): Rellena buffer con los nombres (símbolos) del backtrace, hasta un máximo de size.
  • void backtrace_symbols_fd (void *const *buffer, int size, int fd): Hace la misma operación que la anterior, pero devolviendo los strings al fichero fd, en lugar de al buffer de punteros.

Ejemplo de función de uso (de la página de GNU):

     print_trace (void)
     {
         void *array[10];
         size_t size;
         char **strings;
         size_t i;

         size = backtrace (array, 10);
         strings = backtrace_symbols (array, size);

         printf ("Obtained %zd stack frames.\n", size);

         for (i = 0; i < size; i++)
            printf ("%s\n", strings[i]);

         free (strings);
     }

Estas funciones sólo obtienen los datos correspondientes al thread que llama a estas funciones. Si por ejemplo quieres ver las funciones que se llaman en un segmentation fault, deberías cazar la señal SIGSEGV con la función signal de signal.h y llamar a una función que llame a las de execinfo.h.

Enlace: Backtraces, GNU library

Stellarium: Para ver las estrellas

Domingo, 3 de mayo de 2009 por

Este puente he descubierto Stellarium, un programa gratuito, de código abierto, que te permite ver el cielo tal cual y aprender a identificar planetas, estrella, constelaciones...

stellarium

Aunque parezca un coñazo salir a ver las estrellas con portátil, merece la pena hacerlo. Ha sido la primera vez que he sido capaz de identificar constelaciones (jeje, la Osa Mayor no cuenta)
Este programa es más que un simple planisferio, tiene muchas funciones para ir aprendiendo cosillas de Astronomia, como todos los datos de las estrellas y planetas (nombres, distancia, clase...), figuras de las constelaciones para entender por qué se llaman así, etc.
stellarium_constelac
Está disponible tanto en Linux, como Windows o Mac.
A todos los novatos en esto de las Estrellas, les recomiendo que lo descarguen y prueben

El obelisco de calatrava, terminado en Google Earth

Viernes, 1 de mayo de 2009 por

pzacastilla

Resulta curioso comparar el estado de las obras en la vida real y en Google Earth. En Pza Castilla, el pirulo de Calatrava ya está terminado en Google Earth (aunque creo que en el mundo real será dorado), mientras que la torre de Caja Madrid se encuentra en plena construcción, sin cristales en gran parte de la fachada y con gruas en la parte superior, modeladas en 3D. Probablemente un efecto colateral de la crisis de la construcción, muchos arquitectos con mucho tiempo libre.