Précédent: , Monter: Installer les fichiers de débogage   [Table des matières][Index]


12.2 Reconstruire les informations de débogage

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: , Monter: Installer les fichiers de débogage   [Table des matières][Index]