Jak podświetlić i pokolorować wyjście gdb podczas interaktywnego debugowania?

Proszę nie odpowiadać powinienem używać ddd, nemiver, emacs, vim, lub jakiegokolwiek innego front-endu, po prostu wolę gdb, jak to jest, ale chciałbym zobaczyć jego wyjście z niektórymi kolorami terminala.

10 answers

.gdbinit

Możesz dostosować swój ~/.gdbinit, aby mieć kolory. Możesz użyć mammon ' s .gdbinit, który jest dostępny tutaj:

Https://github.com/gdbinit/gdbinit

Możesz go modyfikować, ile chcesz. Znalazłem to dzięki to więc odpowiedź. Oto Rodzaj wyjścia, które możesz uzyskać:

.gdbinit

Dostępne jest również repozytorium GitHub: https://github.com/gdbinit/Gdbinit

Na marginesie, ten sam pomysł był również zastosowane do lldb .

GDB Dashboard

GDB Dashboard (GDB Dashboard) - modułowy interfejs graficzny dla GDB w języku Python.

GDB Dashboard

(void)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łasne .gdbinit zainspirowany poprzednim jeden.

(void)walker

Pwndbg

Niektóre projekty zapewniają zestaw przydatnych funkcji, w tym ulepszony wyświetlacz. Tak jest w przypadku PEDA lub pwndbg. Ten ostatni daje następujący opis:

Zastąpienie PEDA. W duchu naszego dobrego przyjaciela windbg, pwndbg wymawia się pwnd-bag.
  • Speed
  • odporność
  • czysty kod

Dostarcza polecenia do obsługi debugowania i exploit rozwój podobny do tych z PEDA, i lepszy wyświetlacz (choć nie jest to główny cel projektu). Oprogramowanie jest nadal w fazie rozwoju i nie zostało jeszcze poprawnie wydane.

pwndbg

Voltron

Projekt Opis głosi:

Voltron to rozszerzalny interfejs debuggera dla hakerów. Pozwala na dołączanie widoków narzędzi działających w innych terminalach do debuggera (LLDB lub GDB), wyświetlając pomocne informacje takie jak demontaż, stos zawartości, wartości rejestru itp., jednocześnie dając ci to samo debugger CLI jesteś przyzwyczajony.

Możesz zmodyfikować swój .gdbinit, aby automatycznie go zintegrować. Jednak sam wyświetlacz znajduje się poza GDB (np. w podziale tmux).

voltron

GEF

GEF jest inną opcją i jest opisana jako:

[[8]} ma być używany głównie przez wyzyskiwaczy i inżynierów odwrotnych, do zapewnić dodatkowe funkcje do GDB przy użyciu API Pythona do wspomagania podczas procesu dynamicznej analizy i rozwoju wykorzystania.

GEF

 153
Author: BenC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 01:57:31

To nie Kolory, ale rozważmy grafikę graficzną gdb . To robi ogromną różnicę w tym, jak użyteczny jest gdb.

Możesz go uruchomić za pomocą:

gdb -tui executable.out

Zrzut ekranu:

Tutaj wpisz opis obrazka

Jak widać, główne cechy to:

  • pokazuje, na jakiej linii źródła jesteśmy i otaczających linii
  • pokazuje punkty przerwania
 84
Author: John Carter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-09 09:22:34

Wiem, że nie chciałeś frontendu. Ale może cgdb jest bardzo blisko gdb, jest to textmode, ale ma okno źródłowe powyżej z podświetleniem składni w kodzie.

 41
Author: Johan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-11 04:40:48

Możliwe jest znaczne zwiększenie wyglądu gdb poprzez użycie kolorów. Odbywa się to za pomocą jednej z następujących metod:

  1. Kolorowany znak zachęty za pomocą "Ustaw znak zachęty". Np. niech znak zachęty będzie pogrubiony i czerwony: set prompt \033[1;31m(gdb) \033[m
  2. kolorowe polecenia za pomocą hooków
  3. kolorowe podświetlanie składni polecenia "list".

Wszystkie przykłady są dostępne na następujących blogach napisanych przez Michaela Kellehera:

"upiększyć GDB", 12 maja 2010 (przez archive.org)

"eksperymentalne podświetlanie składni GDB", 15 maja 2010 (via archive.org)

 15
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-23 09:42:51
#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 wsparcia TUI, "tryb użytkownika" hack.

Znalazłem główną część tutaj i trochę go zmodyfikowałem. Wymaga podświetlenia, C++filt. Jeśli Kolory się pomieszały, wydaj polecenie re.

 6
Author: ftk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-03 11:09:15

cgdb jest znacznie lepszy niż gdb -tui

 5
Author: justin.yqyang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-10 03:34:24

Chciałem podkreślić w następujący sposób: podkreślić linie śladu stosu, które należą do moich plików źródłowych (a nie bibliotek).

Rozwiązaniem było użycie gdb-python (na MSYS; na Linuksie typowo gdb ma już wbudowany Python?), hook backtrace, use

python stack_trace = gdb.execute('backtrace', False, True')

Następnie przetworzyć stack_trace z wyrażeniami regularnymi Pythona i wydrukować je. Pogrubienie i inne kolory uzyskuje się za pomocą funkcji takiej jak ta:

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)
 3
Author: Evgeni Sergeev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-18 08:09:46

Fajne, właśnie znalazłem tego hacka używając colouta: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit

przed-po

 3
Author: elmarco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-20 10:02:34

Kolejną dobrą kombinację kolorów daje Ta konfiguracja . Ułatwia to kontrolę ścieżek zwrotnych. Aby go użyć, po prostu zapisz ten plik jako ~/.gdbinit i uruchom gdb normalnie

 2
Author: Andrea Araldo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-13 15:31:35

Możesz uzyskać dowolne kolory;

# gdb
(gdb) shell echo -en '\E[47;34m'"\033[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal
 -1
Author: RandomNickName42,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-14 04:16:07