2012-03-12 17 views
17

Sto eseguendo il debug di un programma usando gdb. Prima I load il mio eseguibile, quindi I continue per eseguire il programma. A volte voglio interrompere l'esecuzione del mio programma, quindi faccio Ctrl + C.gdb: uscita programma senza uscire gdb

Il mio problema è che questo chiude sia il mio programma e gdb. Come posso uscire dal mio programma senza uscire da gdb?

+4

Questo non dovrebbe accadere; Ctrl-C dovrebbe solo ** interrompere ** (non terminare) il tuo programma, e sicuramente non dovrebbe terminare gdb. Che ambiente stai usando? – trojanfoe

+1

Sto usando Cygwin. Strano. – Randomblue

risposta

4

Sembra che in Windows, è necessario utilizzare Ctrl-Break non Ctrl-C. Vedi questo page.

Estratto:

programmi MS-Windows che chiamano SetConsoleMode per spegnere la speciale significato della battitura del `Ctrl-C' non può essere interrotta digitando C-c. Per questo motivo, gdb su MS-Windows supporta C- come sequenza di interrupt alternativa , che può essere utilizzata per interrompere il debugge anche se ignora C-c.

+1

Grazie. Questo lascia comunque GDB. Ora quando si chiude scrive "Quit (core dumped)" – Randomblue

+0

@Randomblue Oh blimey - non sembra molto felice lo fa. Non so cosa suggerire, se non passare a compilatori Microsoft forse (sono gratuiti con Windows SDK). – trojanfoe

+0

@Randomblue esegui le cose dalla console 'cmd' o' sh'? Il programma di debug Cygwin o Win32 è nativo? (per la cronaca: è 'gdb' Cygwin o Win32?;)) –

2

Prima eseguire il programma (non da gdb interno), quindi trovare il suo pid.

In un'altra shell, eseguire gdb --pid=<your program's pid>. Questo attribuisce gdb a un programma in esecuzione. Interrompe l'esecuzione del programma, quindi il problema è c per continuare.

Ora esci dal programma, la sessione di gdb rimarrà lì.

+0

Il mio programma è in esecuzione su un host remoto. (Un chip ARM.) – Randomblue

17

Hai provato a utilizzare kill dall'interno di gdb?

+0

Sì. Ma dopo 'continue' non eseguo il prompt dei comandi gdb, quindi non succede nulla. – Randomblue

+0

Come ha detto @trojanfoe, Ctrl-C dovrebbe semplicemente interrompere il programma, in modo da avere nuovamente la console gdb. Tuttavia, prova a usare 'start' per avviare il tuo programma. L'esecuzione dovrebbe fermarsi all'inizio della funzione 'main'. Quindi usa 'kill' per uccidere il tuo programma. – Saphrosit

+0

Quando provo 'start' ottengo" Nessuna tabella dei simboli caricata.Usare il comando "file". " – Randomblue

12

Utilizzare ctrl-c per interrompere l'applicazione. Quindi lancia "signal SIGINT" dal prompt GDB, che invierà questo segnale all'applicazione, facendo in modo che faccia le stesse cose che avrebbe normalmente fatto quando si fa ctrl-c dalla riga di comando.