Previous: , Up: Instalación de archivos de depuración   [Contents][Index]


17.2 Reconstrucción de la información para depuración

Como vimos anteriormente, algunos paquetes, pero no todos, proporcionan información de depuración en una salida llamada debug. ¿Qué puede hacer cuando dicha información de depuración no está disponible? La opción --with-debug-info proporciona una solución para ello: le permite reconstruir uno o más paquetes para los que la información de depuración no esté disponible—y únicamente esos—e injertarlos en la aplicación que esté depurando. Por lo tanto, aunque no es tan rápido como instalar una salida debug, no tiene un coste elevado.

Vamos a ilustrarlo con un ejemplo. Supongamos que está sufriendo un error en Inkscape y desearía que está pasando en GLib, una biblioteca que se encuentra enraizada profundamente en su grafo de dependencias. Además GLib no tiene una salida debug y la pila de llamadas que GDB muestra es completamente deprimente:

(gdb) bt
#0  0x00007ffff5f92190 in g_getenv ()
   from /gnu/store/…-glib-2.62.6/lib/libglib-2.0.so.0
#1  0x00007ffff608a7d6 in gobject_init_ctor ()
   from /gnu/store/…-glib-2.62.6/lib/libgobject-2.0.so.0
#2  0x00007ffff7fe275a in call_init (l=<optimized out>, argc=argc@entry=1, argv=argv@entry=0x7fffffffcfd8,
    env=env@entry=0x7fffffffcfe8) at dl-init.c:72
#3  0x00007ffff7fe2866 in call_init (env=0x7fffffffcfe8, argv=0x7fffffffcfd8, argc=1, l=<optimized out>)
    at dl-init.c:118

Para hacer frente a esta situación debe instalar Inkscape enlazado con una variante de GLib que contenga información de depuración:

guix install inkscape --with-debug-info=glib

Esta vez la depuración será mucho más agradable:

$ gdb --args sh -c 'exec inkscape'
…
(gdb) b g_getenv
Function "g_getenv" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (g_getenv) pending.
(gdb) r
Starting program: /gnu/store/…-profile/bin/sh -c exec\ inkscape
…
(gdb) bt
#0  g_getenv (variable=variable@entry=0x7ffff60c7a2e "GOBJECT_DEBUG") at ../glib-2.62.6/glib/genviron.c:252
#1  0x00007ffff608a7d6 in gobject_init () at ../glib-2.62.6/gobject/gtype.c:4380
#2  gobject_init_ctor () at ../glib-2.62.6/gobject/gtype.c:4493
#3  0x00007ffff7fe275a in call_init (l=<optimized out>, argc=argc@entry=3, argv=argv@entry=0x7fffffffd088,
    env=env@entry=0x7fffffffd0a8) at dl-init.c:72
…

¡Así mejor!

Tenga en cuenta que puede haber paquetes en los que la opción --with-debug-info no tenga el efecto deseado. See --with-debug-info para obtener más información.


Previous: Información separada para depuración, Up: Instalación de archivos de depuración   [Contents][Index]