podzielony widok gdb z kodem

111

Właśnie debugowałem program w gdb i jakoś znalazłem nową funkcję, której nigdy wcześniej nie widziałem, ani nawet o niej nie słyszałem, podzielony widok, w którym mogę zobaczyć i przeglądać kod oprócz wydawania poleceń:

Przepraszamy za zdjęcie, ale ttys nie mają zrzutów ekranu.

Co to jest? Co zrobiłem, a dokładniej, jak mogę ponownie uzyskać ten tryb podzielonego ekranu? Czy jest jakaś nazwa tego trybu, czy gdzieś mogę przeczytać o tym, jak z niego korzystać?

Kevin
źródło
2
Dla szybkiego odniesienia: Możesz wyjść z tego trybu używając dowolnego z Cx Ca, Cx a lub Cx A. 'Zobacz to pytanie .
Richard

Odpowiedzi:

95

Nazywa się TUI (bez żartów). Zacznij na przykład od gdbtuilub gdb -tui...

0xC0000022L
źródło
11
możesz również użyć layout nextpo uruchomieniu gdbnormalnie
khaverim
87

Możesz go aktywować dynamicznie, naciskając ctrl+ xi ctrl+ a.

POHAN WU
źródło
dzięki @ user146043, wydaje się, że to jedyny sposób, jeśli używasz screen'a w tym samym czasie co ctrl-a, jest sposobem na zainicjowanie poleceń ekranowych!
olik79
Wygląda na to, że możesz też zamknąć to połączenie!
Nick Desaulniers
16

Możesz również uruchomić go z powłoki gdb za pomocą polecenia „-” (myślnik). Nie wiem jednak, jak dynamicznie go wyłączyć.

Neowizard
źródło
Wydaje się, że jest to najłatwiejsze w użyciu i zapamiętaniu.
Siyuan Ren
2
Możesz wyjść, wykonując dowolne z Cx Ca, Cx a lub Cx A. Zobacz stackoverflow.com/questions/14147117/ ...
dmonopoly
15

Pulpit nawigacyjny GDB

https://github.com/cyrus-and/gdb-dashboard

Pulpit nawigacyjny GDB korzysta z oficjalnego API GDB Python i wyświetla żądane informacje, gdy GDB zatrzymuje się, np. Po a next, tak jak natywne displaypolecenie .

W porównaniu z TUI:

  • bardziej wytrzymały, ponieważ po prostu drukuje na standardowe wyjście zamiast ustawiać powłokę w bardziej magicznym stanie przekleństw, np .:

  • wysoce konfigurowalny z Pythona: możesz wybrać, co chcesz wyprowadzić i jak duża jest każda sekcja w zależności od tego, co debugujesz.

    Najbardziej przydatne widoki są już zaimplementowane: źródło, asembler, rejestry, stos, pamięć, wątki, wyrażenia ... ale powinno być łatwe do rozszerzenia o wszelkie informacje, które są ujawniane w GDB Python API.

    TUI pozwala tylko na pokazanie dwóch źródeł, asemblera i rejestrów i to wszystko. Chyba że chcesz oczywiście zmodyfikować jego kod źródłowy w C ;-)

wprowadź opis obrazu tutaj

Uważam, że GDB powinien być dostarczany z taką konfiguracją po wyjęciu z pudełka i domyślnie włączony, przyciągnąłby w ten sposób znacznie więcej użytkowników.

Aha, i główny programista, Andrea Cardaci , był bardzo responsywny i niesamowity. Wielkie uznanie.

Zobacz też: Jak podświetlić i pokolorować wyjście gdb podczas debugowania interaktywnego?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
źródło
2
Nie ma wystarczająco dużo słów, aby opisać, jakie to niesamowite. Dzięki :)
unresolved_external
11

Wpisz layoutjako polecenie w gdb, a zostanie wyświetlone podzielone okno.

Alfred
źródło
5

Gdy GDB jest w trybie standardowym, użycie winspowoduje automatyczne przełączenie w tryb TUI.
Inne polecenie w trybie TUI:

  • info win
    Wypisz i podaj rozmiar wszystkich wyświetlanych okien.
  • focus next | prev | src | asm | regs | split
    Ustaw fokus na nazwane okno. Polecenie to pozwala na zmianę aktywnego okna, dzięki czemu klawisze przewijania mogą zostać przeniesione do innego okna.

Przeczytaj tutaj, aby uzyskać dodatkową pomoc.

girardengo
źródło
2

Istnieje również narzędzie interfejsu dla GDB o nazwie cgdb. Nawet z pewnym podkreśleniem koloru. „ESC”, aby przełączyć się do widoku kodu, „i”, aby przełączyć się z powrotem do gdb

cgdb

user3042599
źródło
1

tryb tui był wyraźnie zainspirowany emacsem - odkryłem go przypadkowo, kiedy uderzyłem ^ Xo, który przełącza między podzielonymi oknami w emacsie - czasami uderzam to z roztargnieniem, kiedy to, co powinienem robić, to przełączanie się na inny program. W każdym razie prowadzi to do kolejnej niewymienionej jeszcze funkcji, czyli przeniesienia kursora z okna kodu (w którym można przewijać) do wiersza poleceń lub odwrotnie za pomocą ^ Xo.

Kropelka
źródło
Oczywiście większość programów z GNU ma emac, podobnie jak skróty klawiszowe, głównie ze względu na spójność. Wiem, że w bashu jest tryb vi, ale nie jest on wystarczająco dobry, jak tryb emacsa.
klaus