web-dev-qa-db-fra.com

Comment définir des points d'arrêt sur les futures bibliothèques partagées avec un indicateur de commande

J'essaie d'automatiser une session gdb en utilisant le --command drapeau. J'essaie de définir un point d'arrêt sur une fonction dans une bibliothèque partagée (l'équivalent Unix d'une DLL). Mon cmds.gdb ressemble à ceci:

set args /home/shlomi/conf/bugs/kde/font-break.txt
b IA__FcFontMatch
r

Cependant, je reçois ce qui suit:

 shlomi: ~/progs/bugs-external/kde/font-breaking $ gdb --command = cmds.gdb ... 
 GNU gdb 6.8-2mdv2009.0 (Mandriva Linux version 2009.0) 
 Copyright (C) 2008 Free Software Foundation, Inc. 
 Licence GPLv3 +: GNU GPL version 3 ou ultérieure 
 Ceci est un logiciel gratuit: vous sont libres de le changer et de le redistribuer. 
 Il n'y a AUCUNE GARANTIE, dans la mesure permise par la loi. Tapez "show copying" 
 et "show Warranty" pour plus de détails. 
 Ce GDB a été configuré comme "i586-mandriva-linux-gnu" ... 
 (aucun symbole de débogage trouvé) 
 Fonction "IA__FcFontMatch" non définie. 
 Rendre le point d'arrêt en attente sur la future bibliothèque partagée (y ou [n]) [répondu N; entrée non provenant du terminal] 
 

Cela ne définit donc pas le point d'arrêt après tout. Comment puis-je faire par défaut de répondre "y" pour définir des points d'arrêt sur la future charge de bibliothèque partagée en attente?

Je me souviens que j'ai pu faire quelque chose, mais je ne me souviens pas de quoi.

89
Shlomi Fish

En réponse à moi-même, je voudrais donner la réponse que quelqu'un m'a donnée sur IRC:

 (gdb) apropos en attente 
 actions - Spécifiez les actions à entreprendre à un point de trace 
 définir le point d'arrêt - Paramètres spécifiques au point d'arrêt 
 définir le point d'arrêt en attente - Définir comportement du débogueur concernant les points d'arrêt en attente 
 afficher le point d'arrêt - Paramètres spécifiques au point d'arrêt 
 afficher le point d'arrêt en attente - Afficher le comportement du débogueur concernant les points d'arrêt en attente 

Et donc définir le point d'arrêt en attente fait l'affaire; il est utilisé dans cmds.gdb comme par exemple.

set breakpoint pending on
break <source file name>:<line number>
140
Shlomi Fish

OT: Dans le terminal, cela ressemblerait à cela pour déboguer Caja sur une seule ligne:

gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync
10
äxl

Sans symboles.

objdump -t /lib/libacl.so
SYMBOL TABLE:
no symbols
objdump -T /lib/libacl.so
...
00002bd0 g    DF .text  000000d0  ACL_1.0     acl_delete_entry
...


(gdb) break 0x0002bd0 

(gdb) x/20i acl_delete_entry
0x2bd0 <acl_delete_entry>:      stwu    r1,-32(r1)
0x2bd4 <acl_delete_entry+4>:    mflr    r0
0x2bd8 <acl_delete_entry+8>:    stw     r29,20(r1)
0x2bdc <acl_delete_entry+12>:   stw     r30,24(r1)
0x2be0 <acl_delete_entry+16>:   mr      r29,r4
0x2be4 <acl_delete_entry+20>:   li      r4,28972
5
RandomNickName42