Su un grande applicazione C, ho impostato un watchpoint hardware su un indirizzo di memoria come segue:Punto di controllo hardware GDB molto lento - perché?
(gdb) watch *0x12F5D58
Hardware watchpoint 3: *0x12F5D58
Come si può vedere, si tratta di un watchpoint hardware, non il software, il che spiegherebbe la lentezza.
Ora il tempo di esecuzione dell'applicazione in debugger è stato modificato da meno di dieci secondi a un'ora e il conteggio. Il watchpoint è stato attivato tre volte fino a quel momento, la prima volta dopo 15 minuti quando la pagina di memoria contenente l'indirizzo è stata resa leggibile da sbrk
. Sicuramente durante quei 15 minuti il watchpoint avrebbe dovuto essere efficiente dato che la pagina di memoria era inaccessibile? E questo ancora non spiega, perché è così lento in seguito.
La piattaforma è x86_64 e le versioni GDB sono Ubuntu 9.10 pacchetto:
$ gdb --version
GNU gdb (GDB) 7.0-ubuntu
[...]
e magazzino GDB 7.1 costruita da fonti:
$ gdb-7.1 --version
GNU gdb (GDB) 7.1
Grazie in anticipo per eventuali idee come quello che potrebbe essere il causa o come risolvere/lavorare intorno ad esso.
EDIT: rimosso gettato
EDIT: gdb 7.1
È sempre lento quando si esegue con il debugger o solo quando è impostato un watchpoint? – Gabe
Solo con watchpoint. –