Vorige: , Nach oben: Dateien zur Fehlersuche installieren   [Inhalt][Index]


17.2 Fehlersuchinformationen erneuern

Wie wir oben gesehen haben, bieten manche Pakete, aber nicht alle, Informationen zur Fehlersuche in einer debug-Ausgabe an. Doch was tut man mit denen ohne Fehlersuchinformationen? Die Befehlszeilenoption --with-debug-info stellt eine Lösung dafür da: Mit ihr kann jedes Paket, für das solche Debug-Informationen fehlen, – und nur solche – neu erstellt werden und die Anwendung, in der Sie Fehler suchen, wird damit veredelt. Obwohl es also nicht so schnell geht wie eine debug-Ausgabe zu installieren, ist es doch ein verhältnismäßig kleiner Aufwand.

Schauen wir uns das näher an. Angenommen, Sie erleben einen Fehler in Inkscape und würden gerne wissen, was dabei in GLib passiert. GLib ist eine Bibliothek, die tief im Abhängigkeitsgraphen von GLib liegt. Wie sich herausstellt, verfügt GLib über keine debug-Ausgabe. Die Rückverfolgung („Backtrace“), die GDB anzeigt, ist zu nichts nütze:

(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

Dagegen hilft, wenn Sie Inkscape so installieren, dass es an eine Variante von GLib gebunden ist, die Informationen zur Fehlersuche enthält.

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

Und schon sieht die Fehlersuche wesentlich besser aus:

$ 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
…

Viel besser!

Beachten Sie, dass es Pakete geben kann, für die sich --with-debug-info nicht wie gewünscht auswirkt. Siehe --with-debug-info für mehr Informationen.


Vorige: Fehlersuchinformationen abtrennen, Nach oben: Dateien zur Fehlersuche installieren   [Inhalt][Index]