2012-11-16 22 views
9

Kodda GDB ile her satırda kesme noktası belirlemenin bir yolu var mı? Açıkçası, her bir satır için b *addr'u vurmak istemiyorum, bu yüzden bunu yapmanın hızlı bir yolu olup olmadığını merak ediyorum.GDB'de her satırda kesme noktası belirleme

Düzenle Not: Bir başkası tarafından oluşturulan bir ikili çalıştırıyorum ve kaynak koduna erişimim yok. Ne yazık ki, bu ikili -g bayrağı ile derlenmiş değil. Bu nedenle, koddaki her satırın yalnızca bir adımını atamıyorum.

Ayrıntılı Düzenleme Jason gibi , aşağıda işaret yapabilirsiniz kadar uzun aksine sen, si veya ni kullandıkça kodu ile gerçekten tek adım sadece basitçe s (adım) ya da n (sonraki) için. n veya s, kaynak kodu -g ile derlenmişse, ancak ni veya veya si gibi her derleme komutunun adım adım tersine çevrilmesinden farklı olarak, kaynak kod satırlarından geçiyorsa iyi çalışır. .

+0

? "Liste" için: http://stackoverflow.com/questions/4362581/get-gdb-to-do-a-list-after-every-step –

cevap

7

İlgilendiğiniz kitaplık işlevlerini devreye sokmak için ni (nexti) 'ı kullanabilirsiniz. Yanlışlıkla bunlardan birine adım atarsanız, finish sizi orijinal yordamınıza geri götürmelidir. Bu seviyede çalışan insanlar, tipik olarak, çalıştırılmak üzere olan birkaç sonraki talimatları görüntülemek üzere gdb'ye sahiptir, örn. disp/3i $pc. o kemerde

break-range start end 

:

+0

Wow, bu kadar basit bir çözüm. Ni ve si yerine n ve s kullanıyordum. Mükemmel çalışıyor. GDB'nin ni vs n nasıl yorumladığını merak ediyorum. Ayrıca, disp/3i $ pc muazzam yararlıdır. – smaccoun

+1

'next' Bir kaynak hattının adres aralığını belirlemek için kaynak satırı bilgilerini hata ayıklama bilgisinden kullanır. Satır 10, 0x100'den 0x116'ya gidebilir, bu nedenle hata ayıklayıcı (sahnelerin ardında), komut, bilgisayar 0x116 olana kadar her komutu yönlendirir. Komplikasyonlar, başka bir fonksiyona adım atmayı veya mevcut fonksiyonu (geri dönüş komutu, longjmp, istisna) bırakmayı içerir. Hata ayıklayıcı bir altprogram çağrısına girdiğinde, orijinal işlevinizde bir kesme noktası belirler ve devam eder. Sahnelerin arkasında çok fazla şey oluyor. 'ni' alt düzeydedir. –

1

Kesme noktasını ilk yürütme çizgisine yerleştiremez ve sonra her bir satıra adım atamaz mısınız? Bu, her satırda kesme noktaları belirleyerek neye ulaşmaya çalıştığınıza bağlıdır. İfadeleri değerlendirmek istiyorsanız, mantığımı takip ederek bunu yapabilirsiniz (her satırdan adım). Kod aracılığıyla talimat adımına ulaşmak için si (stepi) kullanın.

+0

İyi nokta. Doğru, ama ben -g bayrağı ile derlenmemiş bir ikili çalıştırdığımı söylemeyi unuttum. Kaynak koduna da erişemiyorum, bu yüzden -g ile yeniden derleyemiyorum. Ne yazık ki, bu bana tek adım atmıyor. Soru netlik için düzenlenmiştir. – smaccoun

İlgili konular