Gelecekteki paylaşılan kitaplıklarda bir komut bayrağıyla kesme noktaları nasıl ayarlanır


94

--commandBayrağı kullanarak bir gdb oturumunu otomatikleştirmeye çalışıyorum . Paylaşılan bir kitaplıkta (DLL'nin Unix eşdeğeri) bir işlev için bir kesme noktası ayarlamaya çalışıyorum. Cmds.gdb'm şuna benzer:

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

Ancak şunu alıyorum:

shlomi: ~ / progs / bugs-external / kde / font kırma $ gdb --command = cmds.gdb ...
GNU gdb 6.8-2mdv2009.0 (Mandriva Linux sürümü 2009.0)
Telif Hakkı (C) 2008 Free Software Foundation, Inc.
Lisans GPLv3 +: GNU GPL sürüm 3 veya üzeri 
Bu bir özgür yazılımdır: onu değiştirmekte ve yeniden dağıtmakta özgürsünüz.
Yasaların izin verdiği ölçüde HİÇBİR GARANTİ YOKTUR. "Kopyalamayı göster" yazın
ve ayrıntılar için "garantiyi göster".
Bu GDB "i586-mandriva-linux-gnu" olarak yapılandırıldı ...
(hata ayıklama sembolü bulunamadı)
"IA__FcFontMatch" işlevi tanımlanmadı.
Gelecekteki paylaşılan kitaplık yüklemesinde kesme noktası bekletilsin mi? (y veya [n]) [cevap N; giriş terminalden değil]

Yani sonuçta kesme noktasını belirlemiyor. Gelecekteki paylaşılan kitaplık yüklemesi için bekleyen kesme noktaları için "y" yanıtı vermeyi nasıl varsayılan yapabilirim?

Bir şeyler yapabildiğimi hatırlıyorum ama ne olduğunu hatırlayamıyorum.


Yanıtlar:


154

Kendi kendime yanıtlayarak, birinin bana IRC'de verdiği cevabı vermek istiyorum:

(gdb) apropos beklemede
eylemler - Bir izleme noktasında gerçekleştirilecek eylemleri belirtin
kesme noktası ayarla - Kesme noktasına özgü ayarlar
kesme noktası beklemede ayarla - Bekleyen kesme noktalarına ilişkin hata ayıklayıcının davranışını ayarlayın
kesme noktasını göster - Kesme noktasına özgü ayarlar
beklemedeki kesme noktasını göster - Hata ayıklayıcının bekleyen kesme noktalarına ilişkin davranışını gösterir

Ve böylece beklemede kesme noktası ayarlamak hile yapar; cmds.gdbmesela gibi kullanılır

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

1
MinGW kullanarak Windows 7 altında hata ayıklamaya çalışırken pastırmamı kurtardı, varsayılan ayar Linux'takinden farklıydı - çok teşekkürler
bph

Nedense bu hatayı alıyorum Program received signal SIGILL, Illegal instruction. Kesme noktalarını bir dosyadan alıyorum ve set breakpoint pending onbazı kesme noktalarım programın yüklediği bir kitaplıkta olduğundan beri var . Manuel olarak kesme noktaları eklersem, hata olmaz. Benzer bir sorunla karşı karşıya olan başka kimse var mı?
brokenfoot

@brokenfoot: Bence sorunuzu burada bir cevaba yorum yapmak yerine yeni bir üst düzey soruda sormalısınız. Bu şekilde daha fazla insan bunu fark edecek. Dahası, sisteminiz hakkında daha fazla bilgi vermelisiniz.
Shlomi Fish

12

OT: Terminalde, Caja'nın hatalarını tek satırda ayıklamak şöyle görünür:

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

3
'Eski' anahtarı nerede buldunuz? Belgelerde bu parametreye herhangi bir referans bulamıyorum (ama işe yarıyor :))
Gearoid Murphy

-exbenim için çalışmadı. Komutları bir tmp dosyasına koymam ve şu kişiyle görüşmem gerekiyordu:gdb -x /tmp/gdb.commands myexecutible
Jason Moore

5

Sembol yok.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.