Précédent: Informations de débogage séparées, Monter: Installer les fichiers de débogage [Table des matières][Index]
Comme nous l’avons montré, certains paquets, mais pas tous, fournissent des
informations de débogage dans une sortie debug
. Que faire lorsque
les informations de débogage sont manquantes ? L’option
--with-debug-info fournit une solution à cela : il vous permet de
reconstruire les paquets pour lesquels les informations de débogages sont
manquantes — et seulement ceux-là — et les greffe sur les applications
que vous déboguez. Ainsi, bien que ce ne soit pas aussi rapide qu’installer
la sortie debug
, ça demande relativement peu de choses.
Illustrons cela. Supposons que vous rencontriez un bogue dans Inkscape et
que vous souhaitiez voir ce qui se passe dans GLib, une bibliothèque assez
loin dans le graphe de dépendances. Il se trouve que GLib n’a pas de sortie
debug
et la trace de débogage de GDB est toute triste :
(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
Pour corriger cela, vous installez Inkscape lié à une variante de GLib qui contient les informations de débogage :
guix install inkscape --with-debug-info=glib
Cette fois-ci, le débogage a bien plus d’informations :
$ 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 …
Bien mieux !
Remarquez qu’il y a des paquets pour lesquels --with-debug-info n’a pas l’effet désiré. Voir --with-debug-info, pour plus d’informations.
Précédent: Informations de débogage séparées, Monter: Installer les fichiers de débogage [Table des matières][Index]