Tiempo transcurrido en gdb

Tiempo transcurrido en gdb

¿Hay alguna manera de medir el tiempo transcurrido al ejecutar el programa gdb?

Mira esto:

<------------bp---------------------------------->

Supongamos que estamos depurando un archivo y en algún lugar aleatorio establecemos un punto de interrupción. Ahora gdbrealizamos algo y luego dejamos que el programa continúe la ejecución usando la gdblínea de comando ( run).

Mi pregunta está aquí. Quiero medir el tiempo transcurrido desde elpbhasta que el programa finalice exitosamente o se produzca algún error.

Mi sugerencia es usar .gdbinitun archivo, y en ese archivo llamamos a alguna función de C para iniciar el temporizador después rundel comando y al final de la ejecución también llamamos a una gettime()función de C.

Entonces, mi pseudocódigo es un poco como este ( .gdbinitarchivo):

break *0x8048452 (random place)
//start time
run
//get time

Respuesta1

La forma más sencilla de hacer esto (si su gdb tiene soporte para Python):

break *0xaddress
run
# target process is now stopped at breakpoint
python import time
python starttime=time.time()
continue
python print (time.time()-starttime)

Si su gdb no es compatible con Python pero puede ejecutar comandos de shell, utilice esto:

shell echo set \$starttime=$(date +%s.%N) > ~/gdbtmp
source ~/gdbtmp
continue
shell echo print $(date +%s.%N)-\$starttime > ~/gdbtmp
source ~/gdbtmp

Alternativamente, puede realizar la llamada al proceso de destino.obtener hora del díaoreloj_gettime, pero eso es mucho más tedioso. Estas funciones devuelven la hora escribiendo en variables en el espacio de direcciones del proceso, que probablemente tendría que asignar llamando a algo como malloc, y que puede no funcionar si su punto de interrupción detuvo el programa en medio de una llamada a otro malloco free.

Sin embargo, un pequeño problema con esta solución es que las líneas de continuar e imprimir resultados deben ejecutarse una después de la otra, o de lo contrario el tiempo será inexacto. Podemos resolver esto poniendo los comandos en un script predefinido mediante "definir". Si ejecutamos define checkTime, gdb nos pedirá que ingresemos una lista de comandos. Simplemente ingrese cualquiera de las listas de comandos anteriores (python/shell) y luego podrá llamar al script simplemente usando el comando checkTime. Entonces, el momento será exacto. Además, puede colocar define checkTimey luego la lista de comandos en el ./gdbinitarchivo para no tener que redefinirlo manualmente cada vez que ejecute un nuevo programa.

información relacionada