Beírtam a következőt: help
, amikor a GDB-ben voltam, de nem találtam semmit a lépésről, lépésről -over and step-out. Töréspontot tettem egy Assembly programba az _start
(break _start
) könyvtárba. Utána beírtam a next
és ezzel befejezte a hibakeresést. Gondolom azért, mert befejezte _start
és nem “t lépni , ahogy szerettem volna.
Mindenki tud segíteni?
Megjegyzések
- Olvassa el a teljes GDB-dokumentumot. Mint emlékszem, nagyon hasznosak voltak ebben, amikor először megtanultam. Sajnos ' nem kellett több évtizedig egyetlen programot sem hibakeresni ezen a szinten, ezért úgy tűnik, hogy a tényleges parancsok kicserélődtek az agyamban. Tehát ' nem igazán tudok választ írni. De, ha kitalálod a kézikönyvekből, akkor válaszolhatsz saját kérdésedre egy bónuszért.
- @MAP I ' próbálja újra. Megpróbáltam jobb hibakeresőt (KDbg) használni, de Nem tudom, hogy ' nem sikerül használni az Ubuntuban .
- a gdb jó hibakereső. Érdemes az Emacst használni frontendként.
- A gdb iszonyatos hibakereső. Számtalan kiterjesztés foglalkozik azzal, hogy mennyit szív. Szörnyű szintaxis, nem konzisztens parancsok, nehézkes, szörnyű lapozás, archaikus formázás, nincs ' t hexdump. Tehát nem, ez ' nem jó hibakereső. Ha úgy gondolja, hogy nem, akkor ' nem használt jó hibakeresőt.
Válasz
help running
ad néhány tippet:
Van step
és next
utasítások (valamint nexti
és 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.
Tehát láthatjuk, hogy step
belép szubrutinokba, de next
over alprogramok.
A step
és stepi
(és a next
és nexti
) “vonal” vagy “utasítás” lépésekkel különböztetik meg egymást.
step -- Step program until it reaches a different source line stepi -- Step one instruction exactly
Kapcsolódó: 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.
Sokkal több hasznos információ található a https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html
Megjegyzések
- Mit jelent alatt azt jelenti, amíg el nem ér egy másik forrásvonalat ?
-
for(i=0;i<10;i++) { printf("%d\n",i); }
egy forrássor, de több utasítás. - Van-e mód a kilépésre? Nem tudtam ' megtalálni a futási súgóban.
- Mit értesz " kilépés "? A
finish
parancs befejezi az aktuális veremkeretet, amely általában befejezi az aktuális alprogramot és visszatér a hívóhoz. -
finish
vagyfin
a GDB-ben astep-out
aIDEA
vagyEclipse
.
Válasz
Azért jöttem ide, mert ugyanaz a kérdésem volt . Végül arra gondoltam, hogy a célom érdekében bármikor használhatok olyat, mint egy hurok “kilépése”, csak beállíthatok egy másik töréspontot a hurok után, majd hagyom, hogy a program befejezzen continue
a hurkot, és utána fuss be a töréspontba. Sajnáljuk, ha ez a legtöbb ember számára nyilvánvaló, de valószínűleg hasznos annak, aki választ keres erre a kérdésre.
Válasz
Használja a “finish” parancsot; ez néha ugyanazt csinálja, mint a “kilépés”. Befejezi a verem műveletét (általában egy függvény), és azután a következő sorra lép. További információkért keresse meg a parancsot.