2009-10-15 7 views
0

Je vous écris un plugin pour audacieux, et je fais l'expérience segfaults au hasard. J'ai regardé autour et j'ai constaté que je peux traiter les vidages de base du programme avec gdb.Comment puis-je ajouter des symboles de débogage à Audacious?

Je l'ai fait, et je suis arrivé cette sortie:

http://pastebin.com/m7d0d663d

Comme vous pouvez le voir, il dit pas de symboles de débogage où trouve nulle part. Je veux compiler audacieux avec des symboles de débogage, mais je ne sais pas comment. J'ai essayé configurer d'édition, qui ne comprend qu'un fichier nommé buildsys.mk, donc j'edited que et enlevé le drapeau -s de l'éditeur de liens, et fait en sorte que le drapeau -g est transmis au compilateur. La sortie gdb ci-dessus est après que je l'ai fait, donc apparemment ce que j'ai fait n'a eu aucun effet.

Alors, comment puis-je conserver des symboles de débogage lors de la compilation audacieuse? Le problème est que je ne fais qu'écrire un petit plugin, et que je n'ai pas compris le code audacieux. MISE À JOUR: J'ai ajouté des symboles de débogage pour gtk + et glib (et j'ai également essayé l'option CFLAGS = -g), et j'ai fait analyser quelques coredumps. La ligne de fond est la suivante:

(gdb) bt 
#0 gtk_text_iter_make_real (_iter=<value optimized out>) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextiter.c:202 
#1 0xb7c1cf5e in _gtk_text_iter_get_any_segment (iter=0x0) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextiter.c:474 
#2 0xb7c24cd6 in IA__gtk_text_layout_get_line_display (layout=0x93a4318, line=0x9af6270, size_only=1) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextlayout.c:2196 
#3 0xb7c29172 in gtk_text_layout_real_wrap (layout=0x93a4318, line=0x9af6270, line_data=0xb10036b8) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextlayout.c:1147 
#4 0xb7c2358f in IA__gtk_text_layout_wrap (layout=0x93a4318, line=0x9af6270, line_data=0x0) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextlayout.c:693 
#5 0xb7c060a1 in _gtk_text_btree_validate_line (tree=0x9407370, line=0x9af6270, view_id=0x93a4318) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextbtree.c:5422 
#6 0xb7c27dc1 in IA__gtk_text_layout_validate_yrange (layout=0x93a4318, anchor=0xbfb0e624, y0=0, y1=635) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextlayout.c:1062 
#7 0xb7c34999 in gtk_text_view_validate_onscreen (text_view=0x9406000) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextview.c:3502 
#8 0xb7c35f85 in gtk_text_view_flush_first_validate (text_view=0x9406000) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextview.c:3558 
#9 0xb7c35fde in first_validate_callback (data=0x9406000) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextview.c:3577 
#10 0xb79c88fb in gdk_threads_dispatch (data=0x9bce910) at /build/buildd/gtk+2.0-2.16.1/gdk/gdk.c:498 
#11 0xb7e38c81 in g_idle_dispatch (source=0x938a400, callback=0, user_data=0x9bce910) at /build/buildd/glib2.0-2.20.1/glib/gmain.c:3922 
#12 0xb7e3ab88 in IA__g_main_context_dispatch (context=0x9250760) at /build/buildd/glib2.0-2.20.1/glib/gmain.c:1814 
#13 0xb7e3e0eb in g_main_context_iterate (context=0x9250760, block=1, dispatch=1, self=0x92333e8) at /build/buildd/glib2.0-2.20.1/glib/gmain.c:2448 
#14 0xb7e3e5ba in IA__g_main_loop_run (loop=0x9a92c88) at /build/buildd/glib2.0-2.20.1/glib/gmain.c:2656 
#15 0xb7b707d9 in IA__gtk_main() at /build/buildd/gtk+2.0-2.16.1/gtk/gtkmain.c:1205 
#16 0xb268d56a in skins_init() from /usr/local/lib/audacious/General/skins.so 
#17 0x0805b42a in ??() 
#18 0xb7540775 in __libc_start_main() from /lib/tls/i686/cmov/libc.so.6 
#19 0x08055361 in ??() 
(gdb) 

Et l'erreur exacte est:

#0 gtk_text_iter_make_real (_iter=<value optimized out>) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextiter.c:202 
202 /build/buildd/gtk+2.0-2.16.1/gtk/gtktextiter.c: No such file or directory. 
in /build/buildd/gtk+2.0-2.16.1/gtk/gtktextiter.c 

La ligne exacte est la suivante:

if (iter->segments_changed_stamp != 

Quelqu'un peut-il faire quelque chose sur ce sujet? : - \

+0

-g sur gcc. – Tom

Répondre

1

Il est vrai que cela soit:

./configure CFLAGS=-g && make && make install 

ou

make CFLAGS=-g 

vous obtiendrez une version avec des symboles de débogage, cela est tout à fait improbable pour vous aider à résoudre le problème.

Vous programme s'est écrasé dans /usr/lib/libgtk-x11-2.0.so.0, pas dans audacious2 (quoi que ce soit). Vous analysez également incorrectement le core: list n'a pas de sens à ce stade. Votre première commande (gdb) lors de l'analyse d'un noyau devrait être presque toujours where, suivi par thread apply all where.

Vous pouvez également obtenir de meilleurs résultats de l'installation libgtk2-debuginfo ou d'un tel paquet, qui devrait fournir des informations de débogage pour libgtk-x11-2.0.so.0, et peut vous permettre de voir la source et variables libgtk au point de l'accident.

+0

Merci, cela semble très logique, je vais essayer. Aussi, @veryone, je ne peux pas en être sûr, mais je crois que audacious est déjà compilé avec -g, comme je l'ai déjà dit dans ma question. – FrontierPsycho

+0

À mon avis, c'est une mauvaise approche: GTK + a une base d'utilisateurs importante, il est très peu probable qu'il aurait un tel bug, le débogage de ses internes est une perte de temps (dans ce cas). Après la faute de segmentation, je ferais un backtrace ("bt" dans gdb) et vérifierais mes appels de plugin _first_, déboguant audacieusement seulement quand je suis sûr que le plugin fonctionne correctement. Le débogage GTK + ne devrait être laissé que comme une dernière ressource. – ntd

+0

Quelle est la mauvaise approche? Nous semblons convenir que la toute première commande GDB devrait être "where" (alias "bt"). Il est vrai que le bug n'est probablement pas dans libgtk, mais dans son appelant. Néanmoins, l'installation de libgdtk2-debuginfo peut immédiatement révéler à quel mauvais paramètre l'appelant est passé. –

0

Pour autant que je sache, audacieux utilise autotools. Pas besoin de modifier quoi que ce soit, il suffit de configurer avec:

CFLAGS="-g $CFLAGS" ./configure 

suivi des étapes habituelles pour l'installer. Les drapeaux sont stockés (dans config.status je pense), donc tout appel ultérieur à faire construira un audacieux activé par le débogage.

Questions connexes