
¿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 gdb
realizamos algo y luego dejamos que el programa continúe la ejecución usando la gdb
lí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 .gdbinit
un archivo, y en ese archivo llamamos a alguna función de C para iniciar el temporizador después run
del 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 ( .gdbinit
archivo):
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 malloc
o 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 checkTime
y luego la lista de comandos en el ./gdbinit
archivo para no tener que redefinirlo manualmente cada vez que ejecute un nuevo programa.