Kirjoitin help
ollessani GDB: ssä, mutta en löytänyt mitään askelesta, vaiheesta -over and step-out. Laitoin katkaisupisteen Assembly-ohjelmaan _start
(break _start
). Jälkeenpäin kirjoitin next
ja se suoritti virheenkorjauksen. Luulen, että se johtui siitä, että se lopetti _start
ja ei ”t step-into kuten halusin.
Kuka tahansa voi auttaa?
Kommentit
- Lue kaikki GDB-asiakirjat. Muistan, että he olivat varsin hyödyllisiä tässä, kun opin sitä ensin. Valitettavasti en ole tarvinnut ' tarvita virheenkorjausta mistään ohjelmasta tällä tasolla useiden vuosikymmenien ajan, joten todelliset komennot näyttävät vaihtaneen aivoihin. Joten en voi ' kirjoittaa oikeastaan vastausta. Mutta jos selvität sen käsikirjoista, voit vastata bonukseesi omaan kysymykseesi.
- @MAP I ' yritän uudelleen. Yritin käyttää parempaa virheenkorjainta (KDbg), mutta en ' ei onnistu käyttämään sitä Ubunnussa .
- gdb on hyvä virheenkorjaaja. Haluat ehkä käyttää Emacsia sen käyttöliittymänä.
- gdb on kauhea virheenkorjaus. On lukemattomia laajennuksia käsittelemään vain sitä, kuinka paljon se imee. Kauhea syntaksi, ei-konsostenttiset komennot, kömpelö kauhea sivunvaihto, arkaainen muotoilu, ei ole ' t hexdumpia. Joten ei, se ' ei ole hyvä virheenkorjaaja. Jos luulet sen olevan, et ole ' käyttänyt hyvää virheenkorjainta.
Vastaa
help running
tarjoaa joitain vihjeitä:
step
ja next
-asennukset (ja myös nexti
ja 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.
Joten voimme nähdä, että step
siirtyy osaksi aliohjelmia, mutta next
yli aliohjelmat.
step
ja stepi
(ja next
ja nexti
) eroavat toisistaan ”rivin” tai ”käskyn” lisäyksillä.
step -- Step program until it reaches a different source line stepi -- Step one instruction exactly
Liittyvä on 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.
Paljon hyödyllistä tietoa on osoitteessa https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html
kommentit
- mitä se tekee tarkoittaa , kunnes se saavuttaa toisen lähdeviivan ?
-
for(i=0;i<10;i++) { printf("%d\n",i); }
on yksi lähdeviiva, mutta useita ohjeita. - Onko olemassa tapa poistua? En voinut ' löytää sitä käynnissä olevasta ohjeesta.
- Mitä tarkoitat " askel pois "?
finish
-komento viimeistelee nykyisen pinokehyksen, joka normaalisti täydentää nykyisen alirutiinin ja palaa soittajalle. -
finish
taifin
GDB: ssä onstep-out
muodossaIDEA
taiEclipse
.
vastaus
Tulin tänne, koska minulla oli sama kysymys . Ajattelin lopulta, että omaan tarkoitukseeni milloin tahansa voisin käyttää jotain ”silmukan poistumista”, voin vain asettaa toisen katkaisupisteen silmukan jälkeen ja antaa ohjelman lopettaa lopuksi continue
silmukka ja törmätä rikkoutumispisteeseen jälkeenpäin. Anteeksi, jos se on ilmeistä useimmille ihmisille, mutta siitä on todennäköisesti hyötyä jollekin, joka etsii vastausta tähän kysymykseen.
Vastaa
Käytä komentoa ”finish”; tämä toisinaan tekee saman asian kuin ”poistu”. Se ”viimeistelee mitä pino tekee (yleensä toiminto), ja siirry seuraavalle riville sen jälkeen. Etsi komento saadaksesi lisätietoja.