2008-09-19 9 views
78

Sto provando ad automatizzare una sessione gdb usando il flag --command. Sto cercando di impostare un punto di interruzione su una funzione in una libreria condivisa (l'equivalente Unix di una DLL). Il mio cmds.gdb assomiglia a questo:Come impostare punti di interruzione su future librerie condivise con una flag di comando

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

Comunque, sto ottenendo il seguente:

 
shlomi:~/progs/bugs-external/kde/font-breaking$ gdb --command=cmds.gdb... 
GNU gdb 6.8-2mdv2009.0 (Mandriva Linux release 2009.0) 
Copyright (C) 2008 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "i586-mandriva-linux-gnu"... 
(no debugging symbols found) 
Function "IA__FcFontMatch" not defined. 
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal] 

Quindi non imposta il punto di interruzione, dopo tutto. Come posso rendere predefinita la risposta a "y" per impostare i breakpoint su un carico di libreria condivisa in attesa?

Ricordo che ero in grado di fare qualcosa, ma non ricordo cosa.

+0

correlati: [Can “input non da terminali” di gdb messaggi essere soppresso?] (Http: // stackoverflow.com/questions/23005668/can-gdbs-input-not-from-terminal-messages-be-suppressed) – TooTone

risposta

123

Come rispondere a me stesso, mi piacerebbe dare la risposta che qualcuno mi ha dato su IRC:

 
(gdb) apropos pending 
actions -- Specify the actions to be taken at a tracepoint 
set breakpoint -- Breakpoint specific settings 
set breakpoint pending -- Set debugger's behavior regarding pending breakpoints 
show breakpoint -- Breakpoint specific settings 
show breakpoint pending -- Show debugger's behavior regarding pending breakpoints 

E così impostare un breakpoint in attesa sul fa il trucco; è usato in cmds.gdb come per es.

set breakpoint pending on 
break <source file name>:<line number> 
+6

yay! Ho appreso qualcosa di nuovo su GDB oggi =) – Branan

+0

che ha salvato il bacon cercando di eseguire il debug su Windows 7 usando MinGW, l'impostazione predefinita era diversa da Linux - molte grazie – bph

+0

Per qualche motivo, ottengo questo errore 'Il programma ha ricevuto il segnale SIGILL, Istruzione illegale ». Sto recuperando i punti di interruzione da un file e ho "impostato il punto di interruzione in sospeso" poiché alcuni dei miei punti di interruzione sono in una libreria caricata dal programma. Se aggiungo i punti di interruzione manualmente, non ci sono errori. Qualcun'altro che ha problemi simili? – brokenfoot

0

È necessario interrompere l'accesso principale, ad esempio, ed eseguire tale interruzione. Quindi verranno caricate le librerie condivise.

spiegato per apache

5

Senza simboli.

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 
8

OT: In terminale sarebbe simile a questa per eseguire il debug Caja in una sola riga:

gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync 
+2

Dove hai trovato l'interruttore 'ex' ?, Non riesco a trovare alcun riferimento a questo parametro nella documentazione (ma funziona :)) –

+0

'-ex' non ha funzionato per me. Ho dovuto inserire i comandi in un file tmp e chiamare con: 'gdb -x /tmp/gdb.commands myexecutible' –

Problemi correlati