Vorige: Fehlersuchinformationen abtrennen, Nach oben: Dateien zur Fehlersuche installieren [Inhalt][Index]
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]