2012-01-22 9 views
9

Sto utilizzando GDB per eseguire il debug di alcune delle mie applicazioni C. Quello che faccio attualmente è caricare l'applicazione di destinazione, impostare un punto di interruzione sulla linea 30 ed eseguirlo.GDB - Visualizza l'output dell'applicazione di destinazione in una finestra separata

Vorrei rendere GDB visualizzare l'output della mia applicazione in una nuova finestra di terminale mentre sono ancora in grado di controllare la gestione del punto di interruzione tramite la finestra del terminale GDB, ma non riesco a trovare un interruttore appropriato . C'è un modo per far visualizzare a GDB l'output del mio programma nella sua finestra?

risposta

0

Il modo migliore che conosco è di reindirizzare l'output del programma su un file, quindi il file tail -f in un altro terminale. Il reindirizzamento viene eseguito con run > filename, come documentato nello GDB documentation.

+0

Mille grazie per la risposta. Sfortunatamente non funziona per quello che volevo fare, ma sono riuscito a trovare una soluzione alternativa per i miei scopi da solo filtrando l'output e reindirizzandolo in un'altra applicazione (Il mio progetto è in esecuzione su Windows e utilizza il bundle MiniGW). – beta

+0

buona fortuna con ncurses :-) – clearlight

12

È possibile utilizzare set new-console on per eseguire ciò come mostrato here.

+0

Oh bene grazie mille questo è esattamente quello che stavo cercando. Terrò sicuramente a mente la tua risposta quando riprendo a lavorare con GDB! – beta

+0

Questa risposta mi ha salvato la vita proprio ora. Non so perché non sono stato in grado di trovare questa impostazione prima. Grazie mille –

+0

@Herr_Doktor è contento di aver aiutato :) la documentazione in stile gnu non tende a spiegarsi in modo facile da trovare, quindi è comprensibile come potresti averlo perso. – greatwolf

6

Un altro modo per farlo sarebbe avviare il programma di destinazione con gdbserver (presumendo che sia disponibile per voi). Quindi puoi collegare GDB avviato in una finestra separata a gdbserver.

GNU gdbserver documentation

Dalla finestra A:

gdbserver :12345 myprog [args...] 

Dalla finestra B:

gdb test 
GNU gdb 6.6 
... 
(gdb) target remote localhost:12345 
Remote debugging using localhost:12345 
0x009867c0 in ??() 
(gdb) b main 
Breakpoint 1 at 0x804834a: file test.c, line 40. 
(gdb) c 
Continuing. 

Breakpoint 1, main (argc=1, argv=0xffff8904) at test.c:40 
40   int i = 1; 
(gdb) 
+0

Sembra anche un'ottima soluzione, molte grazie per averlo pubblicato. Non ho mai lavorato con gdbserver in precedenza. – beta

+0

È possibile associare invece "127.0.0.1:12345". – ysdx

1

Basta usare tty comando. Se si desidera che l'uscita del programma reindirizzato a/dev/pts/5 Tipo:

tty /dev/pts/5 
+0

È una nuova opzione per il comando 'tty'? Sul mio sistema Fedora 19 il comando 'tty' non accetta quel parametro. – KyleL

+0

@KdawgUD: sei sicuro? Il comando funziona per me. Puoi mostrare un messaggio di errore? –

+1

In documenti [qui] (https://sourceware.org/gdb/onlinedocs/gdb/Input_002fOutput.html) c'è un esempio. –

5

Per persone chiedendo come utilizzare il comando tty GDB: ecco un breve descrizione ...

  • Aprire un nuova finestra della console. Qui reindirizzeremo l'output dal programma che gira sotto GDB. Questa è la nostra finestra di output.
  • Eseguire il comando tty nella finestra di output. Questo mostrerà il nome del tty utilizzato dalla console sottostante.

    $ tty
    /dev/pts/4

  • Aprire un'altra finestra della console e avviare GDB qui. Chiamiamola la finestra di GDB.

  • Ora eseguire il comando tty in GDB utilizzando il nome del file tty ottenuto sopra e quindi avviare il processo di debug.

    (gdb) tty /dev/pts/4
    (gdb) run

Ora si dovrebbe essere in grado di vedere l'output programma separatamente nella finestra di output.

Nota: il comando GDB set new-console on non funziona su Linux! È pensato per essere eseguito solo su Windows. Usa il metodo tty descritto sopra su Linux.

0

Con lldb su Mac seguente esegue il programma in w nuova finestra di terminale, mentre i comandi del debugger dalla finestra originale:

$ lldb <prog> 
(lldb) b main # if you want to set a breakpoint 
(lldb) process launch --tty -- <args> 

Questo esegue il programma come un processo in specificato TTY (finestra di terminale) :

$ tty # (in other window, get tty name) 
/dev/ttys002 

$ lldb 
(lldb) b main # if you want to set a breakpoint 
(lldb) process launch --tty=/dev/ttys002 -- <args> 
Problemi correlati