En una aplicación de gran C, que han establecido un punto de observación de hardware en una dirección de memoria de la siguiente manera:Punto de observación del hardware GDB muy lento - ¿por qué?
(gdb) watch *0x12F5D58
Hardware watchpoint 3: *0x12F5D58
Como se puede ver, se trata de un punto de observación de hardware, no de software, lo que explicaría la lentitud.
Ahora el tiempo de ejecución de la aplicación en el depurador ha cambiado de menos de diez segundos a una hora y el recuento. El punto de observación se ha disparado tres veces hasta ahora, la primera vez después de 15 minutos cuando la página de memoria que contiene la dirección se hizo legible por sbrk
. Seguramente durante esos 15 minutos, el punto de observación debería haber sido eficiente ya que la página de memoria era inaccesible. Y eso todavía no explica, por qué es tan lento después.
La plataforma es x86_64 y las versiones de GDB son Ubuntu 9.10 paquete:
$ gdb --version
GNU gdb (GDB) 7.0-ubuntu
[...]
y de la GDB 7.1 construido a partir de fuentes:
$ gdb-7.1 --version
GNU gdb (GDB) 7.1
Gracias de antemano por alguna idea de lo que podría ser el causa o cómo solucionarlo/solucionarlo.
EDIT: eliminado fundido
EDIT: GDB 7.1
¿Siempre es lento cuando se ejecuta bajo el depurador o solo cuando tiene un conjunto de puntos de observación? – Gabe
Solo con punto de observación. –