GDB'ye adım adım adım adım adım adım adım adım adım adım adım adım adım adım nasıl mı uzarsınız?


42

GDB'deyken helpyazdım ancak adım adım, adım adım ve adım adım hiçbir şey bulamadım. Bir Montaj programında _start( break _start) 'da bir kesme noktası koydum . Daha sonra yazdım nextve hata ayıklama bitti. Sanırım istediğim gibi bittiği _startve adım atmadığı içindi .

Yardım edebilecek biri var mı?


GDB belgelerinin tamamını okuyun. Hatırladığım kadarıyla, ilk öğrendiğimde, bu konuda oldukça yardımcı oldular. Ne yazık ki, birkaç on yıl boyunca bu seviyede herhangi bir programda hata ayıklamaya ihtiyacım olmadı, bu yüzden gerçek komutlar beynimde değiştirilmiş görünüyor. Yani gerçekten bir cevap yazamam. Ancak, kılavuzlardan anlarsanız, o zaman bonus için kendi sorunuza cevap verebilirsiniz.
MAP

@ Harita tekrar deneyeceğim. Daha iyi bir hata ayıklayıcı (KDbg) kullanmaya çalıştım ama Ubuntu'da kullanamadım .
Pichi Wuana

Yanıtlar:


38

help running bazı ipuçları sağlar:

Var stepve nextöğretileri (ve ayrıca nextive stepi).

(gdb) help next
Step program, proceeding through subroutine calls.
Usage: next [N]
Unlike "step", if the current source line calls a subroutine,
this command does not enter the subroutine, but instead steps over
the call, in effect treating it as a single source line.

Bu yüzden görebilirsiniz stepadımları içine değişmezler ancak nextadım olacaktır üzerinde altyordamlarını.

stepVe stepi(ve nextve nexti) "hat" veya "kullanıcı" artışlarla ayırt edilir.

step -- Step program until it reaches a different source line
stepi -- Step one instruction exactly

İlgili finish:

(gdb) help finish
Execute until selected stack frame returns.
Usage: finish
Upon return, the value returned is printed and put in the value history.

Daha birçok faydalı bilgi https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html adresinde bulunabilir.


Farklı bir kaynak hattına ulaşana kadar ne anlama geliyor ?
Pichi Wuana

1
for(i=0;i<10;i++) { printf("%d\n",i); }tek bir kaynak satırı, ancak birden çok talimat.
Stephen Harris

3
Çıkmanın bir yolu var mı? Koşarken yardım bulamadım.
nukeguy

1
"Çıkma" ile ne demek istiyorsun? finishKomutu normal mevcut alt yordamı tamamlamak ve arayan dönecektir geçerli yığın çerçeve tamamlayacaktır.
Stephen Harris

@PichiWuana gdb, bir sonraki kaynak kod satırını temsil eden ilk yönergeye ulaşılana kadar gerekli montaj talimatlarını adım adım izleyecektir
U007D

0

Buraya geldim çünkü aynı sorum vardı. Sonunda amacım için, bir döngünün "çıkması" gibi bir şey kullanabileceğimi düşündüm, sadece döngünden sonra başka bir kırılma noktası ayarlayabileceğimi ve programın continuedöngünün bitmesini ve daha sonra kırılma noktasına girmesini sağlayabileceğimi düşündüm . Üzgünüm, bu çoğu insan için açık, ancak bu sorunun cevabını arayan biri için muhtemelen yardımcı olacaktır.

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.