Wpisałem help, gdy byłem w GDB, ale nie znalazłem nic o wkroczeniu, kroku -over and step-out. Umieściłem punkt przerwania w programie Asemblera w _start (break _start). Następnie wpisałem next i zakończyło debugowanie. Wydaje mi się, że to dlatego, że zakończyło _start i nie „t wkrocz w tak, jak chciałem.

Czy ktoś może pomóc?

Komentarze

  • Przeczytaj pełną dokumentację GDB. O ile pamiętam, byli w tym bardzo pomocni, kiedy się tego nauczyłem. Niestety, od kilku dekad nie ' nie musiałem debugować żadnego programu na tym poziomie, więc wydaje się, że rzeczywiste polecenia zostały zamienione w moim mózgu. Tak więc naprawdę nie mogę ' napisać odpowiedzi. Ale jeśli zrozumiesz to na podstawie podręczników, możesz odpowiedzieć na własne pytanie, aby otrzymać premię.
  • @MAP I ' spróbuję ponownie. Próbowałem użyć lepszego debuggera (KDbg), ale Nie ' nie udało mi się go używać w Ubuntu .
  • gdb to dobry debugger. Możesz chcieć użyć Emacsa jako jego nakładki.
  • gdb to okropny debugger. Istnieje mnóstwo rozszerzeń, aby poradzić sobie z tym, jak bardzo jest do bani. Okropna składnia, niespójne polecenia, niezgrabne okropne stronicowanie, archaiczne formatowanie, nie ' nie ma zrzutu heksowego. Więc nie, to ' nie jest dobrym debugerem. Jeśli myślisz, że tak, to nie ' nie użyłeś dobrego debuggera.

Odpowiedź

help running zawiera kilka wskazówek:

Istnieją step i next instuctions (a także nexti i 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. 

Widzimy więc, że step przechodzi do podprogramów, ale next ponad podprogramami.

step i stepi (oraz next i nexti) są rozróżniane na podstawie przyrostów „line” lub „instrukcji”.

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

Powiązane: 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. 

O wiele więcej przydatnych informacji można znaleźć pod adresem https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html

Komentarze

  • Co to oznacza oznacza dopóki nie osiągnie innej linii źródłowej ?
  • for(i=0;i<10;i++) { printf("%d\n",i); } to jedna linia źródłowa, ale wiele instrukcji.
  • Czy jest sposób, aby wyjść? Nie mogłem ' znaleźć w pomocy dotyczącej uruchamiania.
  • Co masz na myśli, mówiąc o " wyjściu "? Polecenie finish zakończy bieżącą ramkę stosu, co normalnie zakończy bieżący podprogram i powróci do obiektu wywołującego.
  • finish lub fin w GDB, to step-out w IDEA lub Eclipse.

Odpowiedź

Przyszedłem tutaj, ponieważ miałem to samo pytanie . W końcu doszedłem do wniosku, że za każdym razem, gdy mogę użyć czegoś takiego jak „wyjście” z pętli, mogę po prostu ustawić kolejny punkt przerwania po pętli, a następnie pozwolić programowi continue zakończyć pętli, a następnie wbiegnij do punktu przerwania. Przepraszamy, jeśli jest to oczywiste dla większości ludzi, ale prawdopodobnie jest to pomocne dla kogoś szukającego odpowiedzi na to pytanie.

Odpowiedź

Użyj polecenia „zakończ”; czasami robi to to samo, co „wyjście”. Kończy to, co robi stos (zwykle jest to funkcja) i przechodzi do następnego wiersza po tym. Wyszukaj polecenie, aby uzyskać więcej informacji.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *