gdb split view con codice


111

Stavo solo eseguendo il debug di un programma in gdb e in qualche modo ho trovato una nuova funzionalità che non avevo mai visto o di cui non avevo mai sentito parlare prima, una vista divisa in cui posso vedere e sfogliare il codice oltre a dare comandi:

Mi dispiace per l'immagine, ma le tty non hanno screenshot.

Cos'è questo? Cosa ho fatto o, più specificamente, come posso ottenere di nuovo questa modalità schermo diviso? C'è un nome per questa modalità o da qualche parte posso leggere su come usarla?


2
Per una rapida consultazione: è possibile uscire da questa modalità utilizzando qualsiasi Cx Ca, Cx a o Cx A.` Vedi questa domanda .
Richard

Risposte:


95

Si chiama TUI (non sto scherzando). Inizia ad esempio con gdbtuio gdb -tui...


11
puoi anche usarlo layout nextdopo aver iniziato gdbnormalmente
khaverim

87

Puoi attivarlo dinamicamente premendo ctrl+ xe ctrl+ a.


grazie @ user146043, questo sembra l'unico modo se esegui screen contemporaneamente a ctrl-a è il modo per avviare i comandi dello schermo!
olik79

Sembra che tu possa chiudere anche con quella combo!
Nick Desaulniers



15

Dashboard GDB

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

Il dashboard di GDB utilizza l' API Python ufficiale di GDB e stampa le informazioni desiderate quando GDB si ferma, ad esempio dopo un next, come il displaycomando nativo .

Vs TUI:

  • più robusto, in quanto stampa solo su stdout invece di mettere la shell in uno stato più magico curses, ad esempio:

  • altamente configurabile da Python: puoi selezionare cosa vuoi produrre e quanto è grande ogni sezione a seconda di cosa stai debug.

    Le viste più utili sono già implementate: sorgente, assembly, registri, stack, memoria, thread, espressioni ... ma dovrebbe essere facile estenderlo con qualsiasi informazione esposta sull'API Python di GDB.

    TUI consente solo di mostrare due di sorgente, assembly e registri e basta. A meno che tu non voglia modificare il suo codice sorgente C, ovviamente ;-)

inserisci qui la descrizione dell'immagine

Credo che GDB dovrebbe essere fornito con una configurazione come quella pronta all'uso e attivata per impostazione predefinita, attirerebbe molti più utenti in questo modo.

Oh, e lo sviluppatore principale, Andrea Cardaci , è stato molto reattivo e fantastico. Grandi complimenti.

Vedi anche: Come evidenziare e colorare l'output di gdb durante il debug interattivo?


2
Non ci sono parole sufficienti per descrivere quanto sia fantastico. Grazie :)
unresolved_external

11

Digita layoutcome comando in gdb e verrà visualizzata la finestra divisa.


5

Quando GDB è in modalità standard, l'utilizzo winpasserà automaticamente alla modalità TUI.
Altro comando per la modalità TUI:

  • info win
    Elenca e dai la dimensione di tutte le finestre visualizzate.
  • focus next | prev | src | asm | regs | split
    Imposta lo stato attivo sulla finestra denominata. Questo comando permette di cambiare la finestra attiva in modo che i tasti di scorrimento possano essere influenzati da un'altra finestra.

Leggi qui per ulteriori informazioni.


2

C'è anche uno strumento di interfaccia per GDB chiamato cgdb. Anche con qualche evidenziazione del colore. "ESC" per passare alla visualizzazione codice, "i" per tornare a gdb

cgdb


1

La modalità tui è stata chiaramente ispirata da emacs - l'ho scoperta per caso quando ho premuto ^ Xo, che cambia tra le finestre divise in emacs - a volte l'ho colpito distrattamente quando quello che dovrei fare è passare a un programma diverso. Ad ogni modo, questo porta ad un'altra caratteristica non ancora menzionata, che puoi spostare il cursore dalla finestra del codice (dove puoi scorrere) alla riga di comando, o viceversa, con ^ Xo.


Ovviamente la maggior parte dei programmi GNU hanno emacs come le associazioni di tasti, principalmente per motivi di coerenza. So che esiste una modalità vi in ​​bash, ma non è abbastanza buona come modalità emacs.
klaus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.