Previous: Información separada para depuración, Up: Instalación de archivos de depuración [Contents][Index]
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.