Jak podświetlić i pokolorować wyjście GDB podczas debugowania interaktywnego?
172
Proszę nie odpowiadać. Powinienem używać ddd, nemiver, emacs, vim lub jakiegokolwiek innego interfejsu, po prostu wolę gdb w takiej postaci, w jakiej jest, ale chciałbym zobaczyć jego wyjście z niektórymi kolorami terminala.
Nie da ci kolorów (więc nie będę nazywać tego odpowiedzią), ale pewna konfiguracja ~ / .gdbinit poprawi wrażenia. Używam tego jako absolutnego minimum: ustaw historię zapisuj na zestawie drukuj ładnie ustaw wartość wyjściową-radix 16 ustaw wysokość 0
activout.se
Byłoby miło zmienić zaakceptowaną odpowiedź, aby moja stara, błędna odpowiedź mogła zostać usunięta. Dzięki.
Zgodnie z tą samą koncepcją, GDB Dashboard zapewnia modułowy interfejs wizualny dla GDB w Pythonie.
(nieważne) walker
Inny podobny projekt wykorzystuje obsługę Pythona GDB, aby zapewnić większą rozszerzalność, więc warto to sprawdzić: https://github.com/dholm/voidwalker
@dholm zapewnia również własny plik .gdbinit inspirowany poprzednim.
pwndbg
Niektóre projekty zapewniają zestaw przydatnych funkcji, w tym ulepszony wyświetlacz. Tak jest w przypadku PEDA lub pwndbg . Ten ostatni podaje następujący opis:
Wymiana PEDA. W duchu naszego dobrego znajomego windbg, pwndbgjest wymawiane pwnd-bag.
Prędkość
Odporność
Czysty kod
Zapewnia polecenia do obsługi debugowania i wykorzystywania programów podobnych do tych z PEDA oraz lepsze wyświetlanie (chociaż nie jest to głównym celem projektu). Oprogramowanie jest nadal w fazie rozwoju i nie zostało jeszcze poprawnie wydane.
Voltron to rozszerzalny interfejs debugera dla hakerów. Umożliwia dołączanie widoków narzędzi działających w innych terminalach do debuggera (LLDB lub GDB), wyświetlając przydatne informacje, takie jak demontaż, zawartość stosu, wartości rejestrów itp., Jednocześnie zapewniając ten sam debugger CLI, do którego jesteś przyzwyczajony.
Możesz zmodyfikować swój, .gdbinitaby automatycznie go zintegrować. Jednak sam wyświetlacz znajduje się poza GDB (np. W podziale tmux).
Jest przeznaczony głównie do wykorzystania przez eksploatatorów i inżynierów odwrotnych, aby zapewnić dodatkowe funkcje GDB za pomocą interfejsu API Pythona, aby pomóc w procesie analizy dynamicznej i rozwoju exploitów.
wielkie dzięki za odpowiedź, czy masz pomysł jak wyłączyć wyjście rejestru? (Używam gdb dla kodu C ++ i nie potrzebuję od razu poziomu asemblera)
vak
tak. Cholera „Komentarze muszą mieć co najmniej 15 znaków”.
vak
1
@vak próbowałeś set $SHOWCPUREGISTERS = 0? Zasadniczo masz kilka parametrów, które możesz ustawić i zawsze możesz zmodyfikować kod, aby dopasować go do swoich potrzeb.
BenC
100
To nie są kolory, ale weź pod uwagę tekst GUI gdb . To robi ogromną różnicę w tym, jak użyteczna jest gdb.
Możesz go uruchomić za pomocą:
gdb -tui executable.out
Zrzut ekranu:
Jak widać, główne cechy to:
pokazuje, na której linii źródła się znajdujemy i linie otaczające
Łał! Dzięki! Przez długi czas szukałem ładnej powłoki graficznej wokół gdb i próbowałem xxgdb, kgdb i ddd, ale żaden z nich nie działał zbyt dobrze dla mnie, więc utknąłem przy zwykłym starym interfejsie wiersza poleceń. Ale to jest absolutnie doskonałe!
Thomas Padron-McCarthy
46
Ctrl-x Ctrl-a: Wprowadź to, aby przełączyć się do iz trybu GUI tekstu, działa nawet bez opcji wiersza poleceń.
jturcotte
2
Drukowanie na stdout z programu psuje mi interfejs. Czy są jakieś obejścia poza przekierowaniem?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
Otrzymuję ten sam problem z uszkodzeniem interfejsu przez standardowe wyjście. Ctrl-L lub cokolwiek innego, co jest związane z przerysowaniem, czyni go użytecznym przynajmniej. Dla osób z włączonym trybem edycji vi, Ctrl-X Ctrl-A nie działa, ale polecenie „layout src” przełączy cię w tryb TUI ze źródłem pokazanym jak na obrazku.
wilywampa
1
Otwórz drugi terminal, a następnie wydaj polecenie: $ tty Użyj wyniku, aby skierować wyjście standardowe z sesji gdb do tego terminala za pomocą polecenia (gdb) set inferior-tty. dawny. z mojego zestawu .gdbinit inferior-tty / dev / tty2 teraz twoje standardowe wyjście nie zepsuje $ gdb -tui.
netskink
46
Wiem, że nie chciałeś frontendu. Ale co z cgdb , jest bardzo zbliżony do gdb, jest w trybie tekstowym, ale ma okno źródłowe powyżej z podświetleniem składni w kodzie.
Właśnie próbowałem go uruchomić: nie widzi żadnej historii GDB, a także ma schrzaniony znak zachęty, w którym między daszkiem a rzeczywistym miejscem wpisywania symbolu jest jakiś biały znak (prawdopodobnie dlatego, że mam kolorowy znak zachęty gdb ) . Nie jestem pod wrażeniem.
Hi-Angel,
19
Dzięki zastosowaniu kolorów możliwe jest znaczne uwydatnienie wyglądu gdb. Odbywa się to za pomocą jednej z następujących metod:
Kolorowa podpowiedź poprzez „ustaw znak zachęty”. Np. Zaznacz monit pogrubiony i czerwony:
set prompt \033[1;31m(gdb) \033[m
lub nadaj podpowiedź nowy kształt, pogrubiony i czerwony:
set prompt \033[01;31m\n\n#####################################> \033[0m
Kolorowe polecenia za pomocą haczyków
Podświetlanie składni kolorem w poleceniu „lista”.
Wszystkie przykłady są dostępne w następujących postach na blogu napisanych przez Michaela Kellehera:
@Mike: warto zamieścić tutaj zawartość tych linków, ponieważ witryna nie jest już dostępna, a plik robots.txt uniemożliwił jej zindeksowanie na stronie archive.org.
Stylizacja terminala jest teraz dostępna dla CLI i TUI. Podświetlanie źródła GNU może być dodatkowo używane do zapewniania stylizacji fragmentów kodu źródłowego. Aby uzyskać więcej informacji, zobacz poniżej polecenia „ustawianie stylu”.
Najlepsza odpowiedź NIGDY! Możesz znaleźć tutaj poradnik jak zainstalować gdb 8.3medium.com/@simonconnah/ ... , pamiętaj, że twój komputer potrzebuje co najmniej 512 MB pamięci RAM, w przeciwnym razie gcckompilator rozpocznie koszowanie.
użytkownik
7
#into .gdbinit
shell mkfifo /tmp/colorPipe
define hook-disassemble
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-disassemble
hookpost-list
end
define hook-list
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-list
set logging off
set logging redirect off
shell sleep 0.1s
end
define hook-quit
shell rm /tmp/colorPipe
end
define re
hookpost-disassemble
echo \033[0m
end
document re
Restore colorscheme
end
Ostrzeżenie: Buggy. Brak obsługi TUI, hackowanie w trybie użytkownika.
Znalazłem tutaj główną część
i trochę ją zmodyfikowałem. Wymaga podświetlenia, c ++ filt. Jeśli kolory się pomieszają, wydaj ponownie polecenie.
Następnie przetwórz stack_tracez wyrażeniami regularnymi Pythona i wydrukuj je. Pogrubienie i inne kolory uzyskuje się za pomocą takiej funkcji:
def term_style(*v):"""1 is bold, 30--37 are the 8 colours, but specifying bold may also
change the colour. 40--47 are background colours."""return'\x1B['+';'.join(map(str, v))+'m'#Use like this:print term_style(1)+'This will be bold'+ term_style(0)#Reset.print term_style(1,30)+'This will be bold and coloured'+ term_style(0)print term_style(1,30,40)+'Plus coloured background'+ term_style(0)
Działający przykład wykorzystujący haczyk - nawet minimalny - byłby prawdopodobnie bardziej pożądany.
Hi-Angel,
4
Taka konfiguracja daje kolejną dobrą kombinację kolorów . Znacznie ułatwia sprawdzanie śladów wstecznych. Aby z niego skorzystać, po prostu zapisz ten plik jako ~/.gdbiniti uruchom gdb normalnie
l
zostanie zaimplementowana sourceware.org/bugzilla/show_bug.cgi?id=21044 , po prostu dodaml
do ahook-stop
i wprowadzę Dev Nirvana.Odpowiedzi:
.gdbinit
Możesz dostosować swoje,
~/.gdbinit
aby mieć kolory. Możesz skorzystać z mamonów,.gdbinit
które są dostępne tutaj:https://github.com/gdbinit/gdbinit
Możesz go modyfikować tak bardzo, jak chcesz. Znalazłem to dzięki tej odpowiedzi TAK . Oto rodzaj wyników, które można uzyskać:
Dostępne jest również repozytorium GitHub: https://github.com/gdbinit/Gdbinit
Na marginesie, ten sam pomysł też Nawiasem mówiąc zastosowany do lldb .
Pulpit nawigacyjny GDB
Zgodnie z tą samą koncepcją, GDB Dashboard zapewnia modułowy interfejs wizualny dla GDB w Pythonie.
(nieważne) walker
Inny podobny projekt wykorzystuje obsługę Pythona GDB, aby zapewnić większą rozszerzalność, więc warto to sprawdzić: https://github.com/dholm/voidwalker
@dholm zapewnia również własny plik .gdbinit inspirowany poprzednim.
pwndbg
Niektóre projekty zapewniają zestaw przydatnych funkcji, w tym ulepszony wyświetlacz. Tak jest w przypadku PEDA lub pwndbg . Ten ostatni podaje następujący opis:
Zapewnia polecenia do obsługi debugowania i wykorzystywania programów podobnych do tych z PEDA oraz lepsze wyświetlanie (chociaż nie jest to głównym celem projektu). Oprogramowanie jest nadal w fazie rozwoju i nie zostało jeszcze poprawnie wydane.
voltron
W projekcie opis stanowi:
Możesz zmodyfikować swój,
.gdbinit
aby automatycznie go zintegrować. Jednak sam wyświetlacz znajduje się poza GDB (np. W podziale tmux).GEF
GEF to kolejna opcja, opisana jako:
źródło
set $SHOWCPUREGISTERS = 0
? Zasadniczo masz kilka parametrów, które możesz ustawić i zawsze możesz zmodyfikować kod, aby dopasować go do swoich potrzeb.To nie są kolory, ale weź pod uwagę tekst GUI gdb . To robi ogromną różnicę w tym, jak użyteczna jest gdb.
Możesz go uruchomić za pomocą:
Zrzut ekranu:
Jak widać, główne cechy to:
źródło
Wiem, że nie chciałeś frontendu. Ale co z cgdb , jest bardzo zbliżony do gdb, jest w trybie tekstowym, ale ma okno źródłowe powyżej z podświetleniem składni w kodzie.
źródło
Dzięki zastosowaniu kolorów możliwe jest znaczne uwydatnienie wyglądu gdb. Odbywa się to za pomocą jednej z następujących metod:
Kolorowa podpowiedź poprzez „ustaw znak zachęty”. Np. Zaznacz monit pogrubiony i czerwony:
set prompt \033[1;31m(gdb) \033[m
lub nadaj podpowiedź nowy kształt, pogrubiony i czerwony:
set prompt \033[01;31m\n\n#####################################> \033[0m
Kolorowe polecenia za pomocą haczyków
Wszystkie przykłady są dostępne w następujących postach na blogu napisanych przez Michaela Kellehera:
„Beautify GDB”, 12 maja 2010 (przez archive.org)
„Eksperymentalne podświetlanie składni GDB”, 15 maja 2010 (za pośrednictwem archive.org)
źródło
Nowość w nadchodzącym GDB 8.3!
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
źródło
gdb 8.3
medium.com/@simonconnah/ ... , pamiętaj, że twój komputer potrzebuje co najmniej 512 MB pamięci RAM, w przeciwnym raziegcc
kompilator rozpocznie koszowanie.Ostrzeżenie: Buggy. Brak obsługi TUI, hackowanie w trybie użytkownika.
Znalazłem tutaj główną część i trochę ją zmodyfikowałem. Wymaga podświetlenia, c ++ filt. Jeśli kolory się pomieszają, wydaj ponownie polecenie.
źródło
cgdb
jest znacznie lepszy niżgdb -tui
źródło
Świetnie, właśnie znalazłem ten hack przy użyciu colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
źródło
bash: colout: command not found
kiedy uruchamiambt f
Chciałem wyróżnić w następujący sposób: podkreślić wiersze śladu stosu, które należą do moich plików źródłowych (a nie do bibliotek).
Rozwiązaniem było użycie gdb-python (na MSYS; w Linuksie zazwyczaj
gdb
jest już wbudowany Python?), Podpięciebacktrace
, użycieNastępnie przetwórz
stack_trace
z wyrażeniami regularnymi Pythona i wydrukuj je. Pogrubienie i inne kolory uzyskuje się za pomocą takiej funkcji:źródło
Taka konfiguracja daje kolejną dobrą kombinację kolorów . Znacznie ułatwia sprawdzanie śladów wstecznych. Aby z niego skorzystać, po prostu zapisz ten plik jako
~/.gdbinit
i uruchom gdb normalnieźródło
możesz uzyskać dowolne kolory;
źródło