Nauka poleceń GDB jest na mojej liście wiader, ale w międzyczasie istnieje graficzny debugger dla platform * nix, który akceptuje polecenia Windbg i ma podobną funkcjonalność? Na przykład możliwość wywołania wielu edytowalnych okien pamięci, automatycznego demontażu wokół obszaru podczas przechodzenia krokowego, ustawiania stylu demontażu i posiadania okna z rejestrami, które mają edytowalne wartości?
Komentarze
- @AshRj ah, teraz rozumiem, co masz na myśli. Mój błąd, przepraszam.
- Voltron jest całkowicie nowy, ale wydaje się obiecujący (jeszcze go nie testowałem).
- W sprawie SO: stackoverflow.com/questions/79023/…
Odpowiedź
Założyłem własną nakładkę gdb o nazwie gdbgui , która jest serwer (w Pythonie), który umożliwia dostęp do w pełni funkcjonalnego interfejsu w przeglądarce .
Zainstaluj
pip install gdbgui --upgrade
lub pobierz na gdbgui.com
Działa na wszystkich platformach (Linux, macOS i Windows) oraz w przeglądarkach z JavaScriptem.
Uruchom
Po prostu wpisz
gdbgui
w terminalu, a ty r przeglądarka otworzy nową kartę.
Funkcje
- ustaw / usuń punkty przerwania
- wyświetl kod źródłowy z opcjonalnym wbudowanym kodem maszynowym
- wybierz bieżącą ramkę na stosie
- krok przez kod źródłowy lub kod maszynowy
- tworzenie / eksplorowanie zmiennych
- przeglądanie / wybieranie wątków
- przeglądanie pamięci
- przeglądanie rejestrów
- pełna funkcjonalność terminala gdb, dzięki czemu można wysyłać tradycyjne polecenia gdb i przeglądaj dane wyjściowe programu gdb / gorsze
- układ inspirowany niesamowitym debugerem Chrome
- kompatybilny z RR Mozilli, do debugowania wstecznego
Komentarze
- To naprawdę niezła robota. Projekt dociera do sedna przeciętnego przypadku użycia. Lubię to. Obsługuje również zdalne debugowanie (a raczej obsługuje użycie polecenia
target remote host:port
gdb. Świetnie zrobione. Być może dodanie możliwości łączenia się ze zdalnym hostem w menu byłoby miłym dodatkiem -on. Czy byłoby możliwe zmniejszenie rozmiaru rejestru '? Wszystkie informacje są dostępne, ale (przynajmniej na ARM) można ' nie widzisz wszystkich rejestrów naraz, więc musisz przewijać. - Komentarze tutaj nie są przeznaczone dla indywidualnej
gdbgui
pomocy. Otwórz nową pytanie na sx lub skorzystaj z kanałów pomocy technicznej gdbgui / narzędzia do śledzenia błędów.
Odpowiedz
Chociaż niektórzy ludzie nie ” ze względu na interfejs, warto wspomnieć, że GDB ma również wbudowane GUI (zwane TUI).
Możesz uruchomić GDB w trybie GUI poleceniem: gdb -tui
Krótkie odniesienie do poleceń TUI można znaleźć tutaj: http://beej.us/guide/bggdb/#qref
Odpowiedź
Zwykle używałem Emacs GUD jako nakładki na GDB.
Nie jest zbyt trudne w użyciu, pozwala na wizualne ustawianie punktów przerwania (lub przez okno GDB, jeśli wolisz).
Ma wiele różnych widoków, do których można uzyskać dostęp z menu GDB najwyższego poziomu:
Pozwala również na takie subtelności, jak umożliwienie sprawdzenia wartości przez najechanie na nie kursorem myszy:
Aby z niego skorzystać, musisz najpierw przejść do folder pliku binarnego z C-x C-f
, a następnie M-x gdb
(That „s” Alt + X
” , a następnie wpisując „gdb
”). Po wykonaniu tej czynności możesz wpisać wiersz poleceń gdb lub po prostu nacisnąć [Enter]
, aby zaakceptować jego wartość domyślną. Stamtąd po prostu wpisujesz „start” w oknie gdb z parametrami, które chcesz przekazać do debugowanego programu.
Po tym jesteś prawie złoty, ale masz tylko jeden widok. Menu w górnej części ekranu pod „GUD” pozwolą Ci otworzyć inne odpowiednie widoki dla tego, co próbujesz debugować.(Ramki to osobne okna, a „Windows” to okna w ramkach)
Zazwyczaj punkt przerwania jest ustawiany domyślnie przy uruchomieniu programu, a następnie możesz nawigować po kodzie za pomocą przycisków u góry w oknie lub, jeśli nie masz kodu, możesz dostosować widok, aby umożliwić przejście przez dezasemblację oglądanego pliku binarnego.
Przyciski u góry okna otoczone znakiem „{} „służą do wykonywania kroków na poziomie kodu, a przyciski z” <> „w ich ikonie służą do debugowania na poziomie instrukcji. Więc prawdopodobnie będziesz chciał skupić się na lewej stronie, jeśli robisz normalne debugowanie kodu, i skupić się bardziej na prawej stronie, jeśli wchodzisz w prawdziwe drobiazgi.
Ponadto, jeśli kiedykolwiek się zgubisz, ta ikona:
To jest całą książkę, która prawdopodobnie odpowie na Twoje pytania. Jedyny przypadek, w którym nie istnieje w Emacsie, to sytuacja, gdy jesteś na Debianie (Ubuntu jest w porządku) i zainstalowałeś Emacsa z jego repozytoriów. W takim przypadku musisz zainstalować „emacs<vesrsion>-common-non-dfsg
” aby uzyskać podręczniki. (gdzie „<version>
” to cyfry niedziesiętne zwracane przez M-x version
w Emacs)
Komentarze
- To jest Spacemacs, a nie GNU Emacs, prawda?
- Nie. To zwykłe ' ol GNU Emacs, właśnie mój styl został tak zaprojektowany. Nic, o czym wspomniałem powyżej, nie jest specyficzne dla mojej konfiguracji. (Właściwie, Spacemacs to także zestaw konfiguracji Emacsa, ale nie mam pojęcia, czy zmieni to użycie GDB)
- To ' nie jest w magazynie Emacsa. Z jakiego systemu operacyjnego i pakietów korzystasz?
- Wygląda na to, że masz zainstalowany pakiet Power Line wśród inne rzeczy. emacswiki.org/emacs/PowerLine
- @mrbean To w Linux Mint i tak, myślę, że mój motyw Emacs w 2013 był base16-tomorrow z PowerLine (przy okazji niezłe uznanie!)
Odpowiedź
Moja opinia jest trochę stronniczy, ale do debugowania asemblera, najlepszym dostępnym „frontendem” GDB jest IDA (obsługuje komunikację ze zdalnymi celami GDB). Jednak do debugowania kodu źródłowego poleciłbym KDBG.
Komentarze
- Właściwie polecałbym używanie IDA ' s
linux_server
przez zdalny GDB, ' jest bardziej wydajny i szybszy (ponieważ używa protokołu binarnego, a nie opartego na tekście ). - Proszę uzasadnić swoje zalecenie. Odpowiedzi są napisane nie tylko dla OP, ale dla wszystkich innych osób, które mogą się z tym spotkać w przyszłości.
- Zasadniczo masz pełną moc IDA (wtyczki, skrypty IDAPython, znany GUI,. ..) i nie jest tylko nakładką na GDB.
Odpowiedź
Nawet w przypadku poważnego obniżenia głosów , Chciałbym stanąć po stronie zwykłej, starej zachęty gdb
i odradzać nakładkę z graficznym interfejsem użytkownika. Zacząłem uczyć się bardziej zaawansowanego korzystania z GDB, czytając Sztuka debugowania kilka lat temu. Opisuje GDB i DDD, a także Eclipse jako nakładki na GDB.
Prawdą jest, że przez większość czasu używam Vima jako mojego IDE na terminalu i tmux
(wcześniej screen
z byobu
). Dlatego przełączam się między panelami w mój multiplekser terminala do szybkiego przełączania się między kodem a debuggerem. Monit GDB – po kilku tygodniach wypróbowywania TUI – ma inde ed wszystko, czego kiedykolwiek pragnąłem i pamiętaj, że możesz dołączyć wiele razy do tego samego procesu (patrząc na pamięć tak, jak ją opisujesz).
Wygląda na to, że wszystkie interfejsy pozostają w tyle trochę – nic dziwnego – i bardziej sensowne jest pogodzenie się z podpowiedzią GDB oraz jej drobiazgami i osobliwościami. Pamiętaj, że w przypadku konfiguracji gołej może to być jedyna rzecz, którą masz. Dlatego warto się tego nauczyć, nawet jeśli znajdziesz „przyzwoity” GUI według własnych standardów.
Nowsze wersje GDB będą również obsługiwać skrypty Pythona, a dzięki temu zapewnią bardzo potężny zestaw narzędzi do debugowania, nawet z poziomu wiersza poleceń.
Jeśli absolutnie nalegasz na użycie interfejsu GUI, poleciłbym również IDA Pro z tego prostego powodu, że zapewnia on jeden interfejs dla różnych debuggerów i musisz nauczyć się (lub dostosować) jego skrótów tylko raz. Wady: cena i elastyczność, gdy nie masz licencji na konkretną maszynę lub nie masz możliwości tunelowania do serwera GDB itp …
Nie znam żadnego interfejsu GDB który akceptuje polecenia WinDbg. I jeszcze raz mogę tylko podkreślić: i tak zbierzesz owoce czasu zainwestowanego w naukę waniliowego GDB. Nie unikaj wysiłku. W WinDbg jest wiele rzeczy specyficznych dla sposobu działania systemu Windows, jądra systemu Windows itd. GDB jest znacznie bardziej ogólny.
Odpowiedź
Chcę zasugerować DDD .
Jeśli masz kod źródłowy, powinieneś sprawdzić QTCreator . Jego debugger jest podobny do programu Visual Studio, o ile go znasz.
Komentarze
- I ' używał
DDD
i nie był ' tym wentylatorem. ' sprawdzę jednak QtCreator, dzięki! - DDD świetnie nadaje się do wyświetlania struktur danych, możesz je rozłożyć na tablicy (coś w rodzaju lekkiej tabeli ). Stąd debugger wyświetlania danych.
- DDD na pierwszy rzut oka wygląda dziwnie i nieaktualnie, ale ' jest naprawdę potężny.
Odpowiedź
Nie GUI, ale dobry zamiennik, gdy już się do niego przyzwyczaisz (i osobiście uważam, że w przypadku większości rzeczy jest szybszy ) -> https://github.com/gdbinit/Gdbinit .
Przypomniałem sobie, kiedy zacząłem * nix cofać i miałem po raz pierwszy zmierzyć się z gdb. Nienawidziłem tego i + oryginalny gdbinit mamony uratował mi dzień. Obecnie wolę gdb od większości debuggerów GUI.
Spróbuj 🙂
Pełne ujawnienie: jestem autorem narzędzia.
Komentarze
- Powinieneś napisać oświadczenie, że Gdbinit to oprogramowanie, które ' utrzymujesz …
- Więc? To ' jest bezpłatne i dostępne dla każdego. Niezupełnie próbuję tu niczego sprzedawać. Rany …!
- @ fg – To wciąż może być reklama, która nie jest oparta na doświadczeniu, ale wyłącznie na fakcie, że napisałeś to narzędzie.
- Więc możesz ' t reklamować swoje przydatne narzędzia, które rozwiązują problemy i musisz czekać, aż inni to zrobią? To ' to naprawdę dziwny tryb myślenia dla osoby rozwiązującej problemy ” społeczność „.
- @ fG- przeczytaj często zadawane pytania: reverseengineering.stackexchange.com/faq#promotion
Odpowiedź
Nie lubię DDD, jest w nim 90-calowe GUI.
Chciałbym chciałbym polecić KDBG, który jest nakładką KDE na gdb. Poza tym możesz rzucić okiem na Cgdb, które jest rozszerzeniem curses dla gdb.
Ostatnio natknąłem się na Nemiver , wygląda naprawdę obiecująco.
Komentarze
- Czy KDBG działa dobrze przy deasemblacji i debugowaniu również bez źródła? Ich zrzuty ekranu pokazały tylko kod źródłowy.
- Nie ' Nie wiem, nigdy wcześniej tego nie próbowałem …
- ” it ' s, więc 90 ' s w nim ' s GUI ” … bardziej jak 80 ' s
- Czy wygląd GUI jest jedyną wadą?
Odpowiedź
cgdb jest również świetna opcja, jeśli używasz Vima.
cgdb dzieli z vimem wiele poleceń, takich jak wyszukiwanie wyrażeń regularnych i wiele innych. Ze strony głównej cgdb:
Interfejs klawiatury jest wzorowany na vimie, więc użytkownicy vima powinni czuć się jak w domu używając cgdb.
Odpowiedź
Zwykle używam Vim + gdb w trybie CLI podczas kodowania itp. Ale czasami GUI jest preferowane.
Inną opcją, poza wymienionymi, jest Code :: Blocks. Używa GDB i CDB jako zaplecza. W przypadku GDB możesz wybrać AT & T, Intel lub niestandardowy do demontażu. Obsługuje tryb mieszany, a także czystą listę instrukcji. Możesz go dalej ustawić tak, aby oceniał zmienne (w kodzie) pod kursorem itp.
Jest tylko jedno okno zrzutu pamięci, ale możesz dodatkowo wprowadzić surowe polecenia GDB w Linia poleceń na dole, która jest wypisywana do okna – tak np zrzuty pamięci.
Ma osobne okno dla rejestrów CPU, nie można ich bezpośrednio edytować, ale można ustawić wartości za pomocą wspomnianego wiersza poleceń, a także innych wartości:
set $eax = 123 set var xyz = "q"
Zdjęcie poniżej pokazuje go w akcji z debugowaniem źródła na KVM (otwórz link, aby wyświetlić go w większym formacie).
Jednym z problemów, które miałem z tym, są błędy GUI itp., gdy uruchamiam go na Ubuntu 12 – UB 12 ma wersję 10.10. Jednak kompilacja i instalacja aktualnej wersji , 12.11, była bezbolesna.
Np. dla instalacji z niestandardową ścieżką instalacji (jeśli Twoja dystrybucja nie ma aktualnej wersji, a chcesz mieć obie):
- Download (SVN or release). - Unpack. - ./configure --exec-prefix=/blahblah/codeblocks --prefix=/blahblah/codeblocks - make - sudo make install 2>&1 | tee my_install.log
Answer
Ten artykuł Dr Dobbsa przedstawia szczegółowo GUI do debugowania w systemie operacyjnym Linux. Polecam Qt-Creator o nazwie GDB debug oparty na środowisku Linux.W każdym razie artykuł zawiera tylko omówienie debugowania kodu C ++, ale to wystarczy, aby pokazać funkcje debugowania GDB.
Odpowiedź
Polecę UltraGDB , który jest interfejsem graficznym GDB i lekkim IDE opartym na technologii Eclipse.
Odpowiedź
Jest Affnic Debugger GUI . To nie jest darmowe, ale istnieje wersja lite. Jest dostępny dla systemów Windows i Linux & MacOS.
Z oficjalnej witryny internetowej
Affinic Debugger GUI .aka. ADG, jest zaprojektowany jako graficzny interfejs użytkownika dla różnych debuggerów. Ta kompilacja jest specjalnie przeznaczona dla GDB, debuggera GNU. Dzięki graficznym oknom ADG może uwolnić pełną moc debuggerów, przeglądając wiele typy informacji w jednym widoku i manewrowanie debuggerami z łatwym klikaniem. ADG zapewnia również zintegrowany terminal poleceń, umożliwiający użytkownikom bezpośrednie wprowadzanie poleceń debuggera. ADG jest dostępny w systemie Linux / Windows / Mac OS X.
Odpowiedź
VisualStudio.Code ( VS.Code ) działa w systemie Linux i ma rozszerzenie „Native Debug”, które umożliwia korzystanie z gdb. Ma bardzo responsywny interfejs użytkownika. Jest niezwykle lekki pod względem zasobów. To doświadczenie nieco przypomina Visual Studio w systemie Windows dla deweloperów C ++ (nie ma jednak widoku zespołu). Główne skróty debugowania są takie same po wyjęciu z pudełka (F5, Shift-F5, F10, F11).
Instalacja wymaga dwóch kliknięć (jedno do zainstalowania VS.Code, a drugie do zainstalowania rozszerzenia), idealne dla kogoś, kto pochodzi z Windows Visual Studio i chce od razu zacząć produktywność.
Odpowiedź
Istnieje Voltron , czyli rozszerzalny interfejs debugera Pythona obsługujący LLDB, GDB, VDB i WinDbg / CDB (przez PyKD) i działa w systemach macOS, Linux i Windows. W przypadku pierwszych trzech obsługuje x86, x86_64 i obsługuje nawet arm64 dla lldb, dodając nawet obsługę powerpc dla gdb.
Autor napisał również wtyczkę Binary Ninja do integracji Voltrona – https://github.com/snare/binjatron – co umożliwia zsynchronizowane widoki.
Odpowiedź
Pamiętaj, że poniższe informacje dotyczą tylko debugowania kodu źródłowego.
CLion
to IDE
z użyciem gdb
. Nadal masz możliwość wpisywania poleceń, ale wiele funkcji jest bezproblemowo zaimplementowanych w GUI, takich jak przechodzenie po krokach, wyświetlanie aktualnie aktywnych zmiennych i ustawianie breakpoints
. Przeczytaj więcej here
.
Odpowiedź
Możesz użyć GDBFrontend . To bardzo łatwa do zhakowania nakładka GDB.
Pełne ujawnienie: jestem programistą.