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.