Když jsem byl v GDB, zadal jsem help, ale nenašel jsem nic o krok za krokem -over and step-out. Vložil jsem zarážku do montážního programu v _start (break _start). Poté jsem napsal next a ladění bylo dokončeno. Myslím, že to bylo proto, že bylo dokončeno _start a nebylo to „t vstoupit jak jsem chtěl.

Každý, kdo může pomoci?

Komentáře

  • Přečtěte si úplné dokumenty GDB. Jak si vzpomínám, byli mi v tom docela nápomocni, když jsem se to poprvé učil. Bohužel jsem několik desítek let ' nepotřeboval ladit žádný program na této úrovni, takže se zdálo, že se mi skutečné příkazy v mozku vyměnily. Takže nemohu ' opravdu napsat odpověď. Pokud to však zjistíte z příruček, můžete pro bonus odpovědět na svou vlastní otázku.
  • @MAP I ' zkusím to znovu. Snažil jsem se použít lepší debugger (KDbg), ale se mi ' nepodaří jej použít v Ubuntu .
  • gdb je dobrý ladicí program. Možná budete chtít použít Emacs jako frontend.
  • gdb je hrozný debugger. Existuje nesčetné množství rozšíření, která se zabývají tím, jak moc to naštve. Hrozná syntaxe, nedůsledné příkazy, neohrabané strašné stránkování, archaické formátování, nemá ' hexdump. Takže ne, ' to není dobrý debugger. Pokud si myslíte, že to je, pak jste ' nepoužili dobrý debugger.

Odpovědět

help running poskytuje několik rad:

Existují step a next pokyny (a také nexti a 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. 

Vidíme tedy, že step kroky do podprogramů, ale next bude krok nad podprogramy.

step a stepi (a a nexti) se rozlišují po krocích „line“ nebo „instruction“.

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

Související je 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. 

Mnohem užitečnější informace najdete na https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html

Komentáře

  • Co to dělá znamená dokud nedosáhne jiného zdrojového řádku ?
  • for(i=0;i<10;i++) { printf("%d\n",i); } je jeden zdrojový řádek, ale několik pokynů.
  • Existuje způsob, jak vystoupit? Nelze ' v běhu nápovědy jej najít.
  • Co myslíte pod " krokem "? Příkaz finish dokončí aktuální rámec zásobníku, který obvykle dokončí aktuální podprogram a vrátí se volajícímu.
  • finish nebo fin v GDB je step-out v IDEA nebo Eclipse.

Odpověď

Přišel jsem sem, protože jsem měl stejnou otázku . Nakonec jsem přišel na to, že pro svůj účel mohu kdykoli použít něco jako „step-out“ smyčky, mohu po smyčce nastavit další zarážku a poté nechat program continue dokončit smyčku a poté narazit na zarážku. Omlouváme se, pokud je to většině lidí zřejmé, ale je to pravděpodobně užitečné pro někoho, kdo hledá odpověď na tuto otázku.

Odpověď

Použijte příkaz „finish“; to někdy dělá totéž jako „step-out“. Dokončí to, co zásobník dělá (obvykle funkce), a poté přejde na další řádek. Další informace najdete v příkazu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *