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 tai fin GDB: ssä on step-out muodossa IDEA tai Eclipse.

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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *