Debuguję na poziomie asemblera w GDB. Czy istnieje sposób, aby GDB pokazał mi bieżącą instrukcję montażu w taki sam sposób, jak pokazuje bieżącą linię źródłową? Domyślne wyjście po każdym poleceniu wygląda następująco:
0x0001433f 990 Foo::bar(p);
Daje mi to adres bieżącej instrukcji, ale muszę ciągle odwoływać się do wyjścia disassemble
, aby zobaczyć, która instrukcja aktualnie wykonuję.
Odpowiedzi:
Możesz przełączyć się na układ zespołu w GDB:
Zobacz tutaj, aby uzyskać więcej informacji. Bieżąca instrukcja montażu zostanie pokazana w oknie asemblera.
źródło
layout regs
tui reg vector
pokazywanie wektorowych rejestrów zamiast liczb całkowitych. (Nie zawsze jednak bardzo użyteczne, ponieważ nie pozwala wybrać tylko tego.v8_int16
czy czegoś, więc wyświetlanie jest dużym bałaganem). Zobacz wiki tagu x86, aby uzyskać szybki samouczek na temat debugowania asm.si
), a co bezużyteczna funkcja (rzutnia, która nie wyświetla niezbędnych informacji). Nie ma sensu głosować w dół na tę odpowiedź, ponieważ jesteś tylko posłańcem ...·layout src
aby zobaczyć kod źródłowy podczas debugowania, a także warto pamiętać o wyjściu z tego trybu przezCTRL+x+a
Możesz to zrobić
i za każdym razem, gdy GDB zatrzyma się, wyświetli demontaż następnej instrukcji.
GDB-7.0
obsługuje równieżset disassemble-next-line on
, które zdemontują całą następną linię i dadzą więcej kontekstu dezasemblacji.źródło
si
(ale nie używamys
)?Komenda
można ustawić na ciągłe działanie przy użyciu zwykłego mechanizmu konfiguracji.
źródło
x/ni $pc
przeglądanie kolejnych n instrukcji, co jest często bardzo przydatne.Ustawienie następującej opcji:
Daje wyniki, które wyglądają tak:
źródło
Jeśli chcesz, aby kilka kolejnych instrukcji wyświetlało się automatycznie podczas przechodzenia przez program, możesz użyć polecenia display w następujący sposób -
display /3i $pc
Powyższe wyświetli 3 instrukcje za każdym razem, gdy zostanie osiągnięty punkt przerwania lub gdy wykonasz pojedynczy krok programu.
Więcej informacji na blogu tutaj .
źródło
Z poziomu gdb naciśnij,
Ctrl
x
2
a ekran zostanie podzielony na 3 części.Pierwsza część pokazuje normalny kod w języku wysokiego poziomu.
Drugi pokaże ekwiwalent zespołu i odpowiadające
instruction Pointer
.Trzeci przedstawi normalny
gdb
monit o wpisywanie poleceń.źródło
Ctrl-X 2
, ale wygląda jakgdb -tui
tryb, który jest świetny.layout split
pomocą polecenia gdb.Pulpit nawigacyjny GDB
https://github.com/cyrus-and/gdb-dashboard
Ta konfiguracja GDB korzysta z oficjalnego API GDB Python, aby pokazać nam, co chcemy, gdy GDB zatrzymuje się na przykład
next
, podobnie jak TUI.Odkryłem jednak, że ta implementacja jest bardziej niezawodną i konfigurowalną alternatywą dla wbudowanego trybu GDB TUI, jak wyjaśniono na: podzielonym widoku gdb z kodem
Na przykład możemy skonfigurować GDB Dashboard, aby wyświetlał demontaż, źródło, rejestry i stos z:
Oto jak to wygląda, jeśli zamiast tego włączysz wszystkie dostępne widoki:
Powiązane pytania:
źródło