ile kitaplık çağrılarının üzerine basılması Genel bir gdb/gdbserver sorusu var. Ana bilgisayarda gdb ve uzak hedefte gdbserver kullanarak bir arm linux gömülü uygulamada hata ayıklamaya çalışıyorum. Ana satırın başında kod satırlarından geçebilirim. Ancak, gdb (veya gdbserver) paylaşılan kütüphane işlevlerine yapılan çağrılardan sonra kayboluyor gibi görünüyor. Aramadan sonra bir kesme noktası belirlediğimde ve kullanmaya devam ettiğimde bile, kesme noktasını hiç etkilemez. Paylaşılan kütüphanelerde sembollerim olmadığını biliyorum ve gerçekten bunlara adım atmamaya özen gösteriyorum. Paylaşılan kütüphanelerde bulunan semboller olmadan veya en azından bir sonraki kesme noktasına devam etmeden bile, gdb'deki kütüphane çağrılarını başarıyla aşamalı mıyım? Yoksa bu farklı bir problem türünü gösteriyor mu? yerine sembolle daha adresiyleGdb/gdbserver
9
A
cevap
1
Kesme, bazen daha güvenilirdir.
bu deneyin:
(gdb) x/i my_func 0x12345678 <my_func> ... (gdb) break *0x12345678
bunu kesme noktasında talimat (ler) yürütülürken olduğunu gösterir başka bir kaynaktan kanıtınız var mı? Yüksek seviyeli kaynağı görüntülemek yerine, 'gdb' yorumunun bazılarını geçmişe bakmak için sökmeye bakın. –
Sorun, belirli bir paylaşılan nesne ile gerçekleşir mi, yoksa sorunu gösteren önemsiz bir "sınama durumu" oluşturabilir misiniz? –
Uzun yanıt süresi için üzgünüm. Kod gömülü cihazda düzgün çalışıyor. Sadece gdb veya gdbserver kayboluyor. Bir kütüphane işlevine bir çağrı yapıldığında, programdaki yerini kaybeder ve kontrolü yeniden kazanamaz. Birincisi isabet ettiği için kütüphane işlevinin zorunlu olduğunu sanmıyorum, açık(), idamda erken geçemez. – Jim