Cara menyetel breakpoint pada pustaka bersama di masa mendatang dengan bendera perintah

93

Saya mencoba untuk mengotomatiskan sesi gdb menggunakan --commandbendera. Saya mencoba untuk mengatur breakpoint pada fungsi di perpustakaan bersama (setara Unix dari DLL). Cmds.gdb saya terlihat seperti ini:

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

Namun, saya mendapatkan yang berikut:

shlomi: ~ / progs / bugs-external / kde / font-breaking $ gdb --command = cmds.gdb ...
GNU gdb 6.8-2mdv2009.0 (rilis Mandriva Linux 2009.0)
Hak Cipta (C) 2008 Free Software Foundation, Inc.
Lisensi GPLv3 +: GNU GPL versi 3 atau yang lebih baru 
Ini adalah perangkat lunak gratis: Anda bebas mengubah dan mendistribusikannya kembali.
TIDAK ADA JAMINAN, sejauh diizinkan oleh undang-undang. Ketik "tampilkan penyalinan"
dan "tampilkan garansi" untuk detailnya.
GDB ini telah dikonfigurasi sebagai "i586-mandriva-linux-gnu" ...
(tidak ditemukan simbol debugging)
Fungsi "IA__FcFontMatch" tidak ditentukan.
Jadikan breakpoint tertunda pada pemuatan perpustakaan bersama di masa mendatang? (y atau [n]) [menjawab N; masukan bukan dari terminal]

Jadi itu tidak mengatur breakpoint. Bagaimana saya bisa membuat default untuk menjawab "y" untuk mengatur breakpoints menunggu pemuatan perpustakaan bersama di masa mendatang?

Saya ingat bahwa saya dapat melakukan sesuatu, tetapi tidak dapat mengingat apa.

Ikan Shlomi
sumber

Jawaban:

150

Membalas diri saya sendiri, saya ingin memberikan jawaban yang diberikan seseorang kepada saya di IRC:

(gdb) menunggu keputusan
tindakan - Tentukan tindakan yang akan diambil di titik tracepoint
set breakpoint - pengaturan khusus breakpoint
set breakpoint pending - Atur perilaku debugger terkait breakpoint yang tertunda
show breakpoint - pengaturan spesifik breakpoint
show breakpoint pending - Tampilkan perilaku debugger terkait dengan breakpoint yang tertunda

Jadi set breakpoint tertunda melakukan triknya; itu digunakan cmds.gdbseperti misalnya

set breakpoint pending on
break <source file name>:<line number>
Ikan Shlomi
sumber
yang telah menyelamatkan bacon saya mencoba men-debug di bawah Windows 7 menggunakan MinGW, pengaturan default berbeda dari di Linux - terima kasih banyak
bph
Untuk beberapa alasan, saya mendapatkan kesalahan ini Program received signal SIGILL, Illegal instruction. Saya mencari breakpoints dari sebuah file dan saya memilikinya set breakpoint pending onkarena beberapa breakpoint saya ada di perpustakaan yang dimuat program. Jika saya menambahkan breakpoint secara manual, maka tidak ada kesalahan. Adakah orang lain yang menghadapi masalah serupa?
patah
@brokenfoot: Saya rasa Anda harus mengajukan pertanyaan Anda dalam pertanyaan tingkat atas yang baru daripada dalam komentar untuk jawaban di sini. Dengan begitu lebih banyak orang akan menyadarinya. Selain itu, Anda harus memberikan info lebih lanjut tentang sistem Anda.
Shlomi Fish
11

OT: Di terminal akan terlihat seperti ini untuk men-debug Caja dalam satu baris:

gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync
äxl
sumber
2
Di mana Anda menemukan sakelar 'ex' ?, saya tidak dapat menemukan referensi apa pun ke parameter ini dalam dokumentasi (tetapi berfungsi :))
Gearoid Murphy
-extidak berhasil untuk saya. Saya harus meletakkan perintah dalam file tmp dan menelepon dengan:gdb -x /tmp/gdb.commands myexecutible
Jason Moore
5

Tanpa simbol.

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
RandomNickName42
sumber