2009-09-24 9 views

Odpowiedz

126
  1. ślad pełnej: Pełna backtrace ze zmiennymi lokalnymi
  2. się, dół, rama: poruszać się klatkach
  3. zegarek: Zawieś proces, gdy spełniony jest określony warunek
  4. wydruku zestaw całkiem na: Drukuje się ładnie sformatowanej kod źródłowy C
  5. zestaw rejestrowanie na: Zaloguj sesji debugowania pokazać innym wsparcia
  6. zestaw tablicy nadruk na: ładna tablicę drukowania
  7. wykończenie: Kontynuuj do końca funkcji
  8. umożliwić i wyłączyć: enab le/wyłącz punkty przerwania
  9. tbreak: Break raz, a następnie usunąć punkt przerwania
  10. gdzie: Numer linii aktualnie wykonywane
  11. informacyjnych mieszkańców: Zobacz wszystkie zmienne lokalne
  12. informacji args : Wyświetl wszystkie argumenty funkcji
  13. lista: zobacz źródło
  14. RBREAK: przerwa na funkcji dopasowywania wyrażeń regularnych
+5

'info locals' - Wyświetl wszystkie zmienne lokalne; lista - wyświetl źródło; rbreak - break na funkcji pasującej do wyrażenia regularnego. –

+0

source/path/to/macro/file I wszystkie moje fajne makra pomogą mi w debugowaniu w ciągu kilku sekund. – Sudhanshu

+1

'ustaw obiekt drukowania na' dla elementów polimorficznych i 'ustaw elementy druku 0' to dwie komendy, których używam bardzo często. Bardzo przydatne. –

13

thread apply all bt lub thread apply all print $pc: Aby dowiedzieć się szybko, co robią wszystkie wątki.

+0

To było polecenie, którego szukałem przez długi czas! Naprawdę nieprzyjemnie jest sprawdzić wszystkie 30 wątków jeden po drugim! – tothphu

+0

AKA: t a a bt. –

94

Uruchom gdb z interfejsem użytkownika tekstowy

gdb -tui 
+18

Nie mogę uwierzyć, że ta funkcja uciekła mi przez wszystkie te lata. Dziekuję Dziekuję Dziękuję! – DevSolar

+21

lub tylko C-x C-a – elmarco

+0

Dzięki Zaoszczędziłeś dużo mojego czasu .. Wonderfull ... – sujin

42

Zaczynając w gdb 7.0, istnieje reversible debugging, dzięki czemu nowe ulubione polecenia są:

* reverse-continue ('rc') -- Continue program being debugged but run it in reverse 
* reverse-finish -- Execute backward until just before the selected stack frame is called 
* reverse-next ('rn') -- Step program backward, proceeding through subroutine calls. 
* reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines. 
* reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source line 
* reverse-stepi -- Step backward exactly one instruction 
* set exec-direction (forward/reverse) -- Set direction of execution. 
18

Zamiast uruchamiania GDB z "-tui" możesz także przełączyć się do trybu tekstowego po dłuższym czasie, wpisując "wh".

+3

Jak wrócić? –

+3

Ctrl-a a, aby powrócić do "normalnego" widoku wiersza poleceń! – Kevin

+2

"-" można użyć instaed z "wh", krótszy, tym lepiej .. :) –

5

Skrypty gdb to dobra sztuczka, poza tym, że podoba mi się włącza/wyłącza blokowanie harmonogramu, aby zapobiec uruchomieniu innych wątków podczas wkraczania w nie.

+1

Jak ustawić blokowanie harmonogramu? –

+3

'ustaw harmonogram-blokowanie włączone' wewnątrz gdb – Ben

+0

jak to zrobić, aby był domyślny? Próbowałem go .gdbinit, ale gdb drukuje /home/omry/.gdbinit:1: Błąd w źródłowym pliku komend: Cel "Brak" nie obsługuje tego polecenia. –

3
  • Używanie .gdbinit (plik startowy, w którym można pisać makra i wywoływać z gdb). Miejsce .gdbinit w swoim katalogu domowym tak, że jest on podniósł każdym razem gdb jest załadowany
  • informacji podaje notować wszystkie aktywne wątki i F (#) -> # Numer wątek chcesz przejść do

  • kiedyś użyć gdb przekonwertować z hex na dziesiętny lub binarny, jego bardzo przydatny zamiast otwarcia kalkulator

    • p/d 0x10 -> daje odpowiednik dziesiętny 0x10
    • P/t 0x10 - > binarny odpowiednik 0x10
    • P/x 256 -> heks odpowiednik 256
6

pomocą opcji -command=<file with gdb commands> podczas zapalania gdb. To samo, co -x <command file>. Ten plik poleceń może zawierać polecenia gdb, takie jak punkty przerwania, opcje itd. Przydatne w przypadku, gdy określony plik wykonywalny musi zostać wprowadzony podczas kolejnych uruchomień debugowania przy użyciu gdb.

+0

Możesz także użyć opcji '-iex', aby dodać poszczególne polecenia w wierszu poleceń gdb. – doug65536

2

Może to być użyteczne, jestem pewien, że to mogło być lepsze choć pomoc mile widziane:

define mallocinfo 
    set $__f = fopen("/dev/tty", "w") 
    call malloc_info(0, $__f) 
    call fclose($__f) 
4

Zamiast uruchamiania gdb z opcją -tui, aby zobaczyć proces potomny, który zawiera ekran, który wyróżnia miejsce, w którym znajduje się linia kodu, należy wskoczyć i wyjść z tej funkcji za pomocą Cx o i Cx a. Jest to przydatne, jeśli korzystasz z tej funkcji i tymczasowo jej nie używasz, aby użyć poprzedniego przycisku, aby uzyskać poprzednie polecenie.

+2

możesz zmienić fokus na okno poleceń za pomocą 'focus cmd', aby strzałki w górę/w dół działały. Przełączasz się ponownie za pomocą 'focus src'. –