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.
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>
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
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