2012-05-04 9 views
14

So che la risposta a questo, sto mettendo su qui per gli altri a vederloEclipse CDT debug multithread non ottimale - come si esegue una discussione esclusivamente?

Se si utilizza Eclipse CDT, probabilmente capire che Eclipse non è un debugger, è solo un front applicazione fine, in particolare a GDB. Pertanto, quando esegui il debug di programmi C++, utilizzi semplicemente GDB in modo più comodo. Se dovessi eseguire il debug di un programma con multithreading in eclisse CDT, ti renderai conto che le cose diventano rapidamente frenetiche perché quando colpisci un breakpoint, tutti i thread si fermano e quando si tenta di eseguire una singola riga in un thread specifico, viene eseguito anche gli altri thread. Affinché funzioni correttamente, i thread devono essere eseguiti in modo arbitrario ed esclusivo, in modo che quando il programmatore esegue una singola riga, esegue solo il thread specifico.

Quindi, per impostazione predefinita, le impostazioni di gdb per impostazione predefinita disattivano il "blocco dello scheduler". Se esegui il debug delle applicazioni multithreading, capirai che questo deve essere attivo in GDB in modo da ottenere il comportamento desiderato. Come si esegue questo comando:

set scheduler-locking on 

in GDB all'interno di eclissi CDT?

risposta

3

Forse se si aggiunge il seguente script gdb che potrebbe impostare la variabile quando il programma si ferma e lo spegne se si continua:

define hook-step 
set scheduler-locking on 
end 
define hookpost-step 
set scheduler-locking off 
end 
define hook-run 
set scheduler-locking off 
end 
define hook-continue 
set scheduler-locking off 
end 
+2

Come si esegue esattamente lo script GDB da Eclipse? – rbaleksandar

3

Almeno un modo per risolverlo risolve il problema è sapere come navigare nell'immenso insieme di funzionalità offerte da eclissi. In genere, quando viene avviato un programma, eclipse CDT cambia la finestra della console (se è aperta, in genere è in basso) per mostrare l'input/output del programma.

Ma è possibile modificare questo se non lo sapevi-vedi questo image. Quel pulsante sulla penultima a destra, quello blu che assomiglia a un monitor, puoi selezionare la console di input GDB. È stato discusso anche in this thread.

Da lì digitare semplicemente il comando.

risolto, ma un'ottima alternativa

Ma ora che questo è stato risolto, per risolvere in modo migliore come una questione di convenienza; dover digitare set scheduler-locking ogni volta che si avvia un programma è sciocco. Ma il problema con il caricamento di un file gdbinit è che il file gdbinit viene acquisito prima che eclipse abbia impostato il programma per gdb da risolvere. Questo è un problema, poiché fa sì che la vista del debugger si blocchi all'interno di eclipse, come lamenta gdb. Per capire cosa sta succedendo, prova a lanciare gdb, poi dai il comando senza caricare un binario da eseguire. Non funziona, quindi come si imposta questa opzione come appiccicosa?

+0

Ciao Adam, ancora alcuna risposta? – ransh

+0

Beh, immagino che quello che sto cercando sia che gli sviluppatori di Eclipse CDT prendano nota di ciò che ho dovuto dire; Non sono un programmatore di eclissi. Un pulsante di qualche tipo sarebbe stato bello –

+0

Grazie, hai visto anche il comportamento che dopo aver rimosso tutti i punti di interruzione si ferma ancora nello stesso posto? – ransh

Problemi correlati