Existe uma maneira de medir o tempo decorrido na execução do programa gdb
?
Veja isto:
<------------bp---------------------------------->
Suponha que estejamos depurando um arquivo e em algum lugar aleatório definimos um ponto de interrupção. Agora gdb
realizamos algo e depois deixamos o programa continuar a execução usando a gdb
linha de comando ( run
).
Minha pergunta está aqui. Quero medir o tempo decorrido desde obpaté que o programa termine com êxito ou ocorra algum erro.
Minha sugestão é usar .gdbinit
arquivo, e nesse arquivo chamamos alguma função C para iniciar o timer após run
o comando e ao final da execução também chamamos de gettime()
C fun.
Então, meu pseudocódigo é mais ou menos assim ( .gdbinit
arquivo):
break *0x8048452 (random place)
//start time
run
//get time
Responder1
A maneira mais fácil de fazer isso (se o seu gdb tiver suporte a python):
break *0xaddress
run
# target process is now stopped at breakpoint
python import time
python starttime=time.time()
continue
python print (time.time()-starttime)
Se o seu gdb não tiver suporte a python, mas puder executar comandos shell, use isto:
shell echo set \$starttime=$(date +%s.%N) > ~/gdbtmp
source ~/gdbtmp
continue
shell echo print $(date +%s.%N)-\$starttime > ~/gdbtmp
source ~/gdbtmp
Alternativamente, você poderia fazer a chamada do processo de destinoobterhoradodiaourelógio_gettime, mas isso é muito mais tedioso. Essas funções retornam o tempo escrevendo em variáveis no espaço de endereço do processo, que você provavelmente teria que alocar chamando algo como malloc
, e isso pode não funcionar se o seu ponto de interrupção interrompeu o programa no meio de uma chamada para outro malloc
ou free
.
No entanto, um pequeno problema com esta solução é que as linhas de resultado de continuação e impressão precisam ser executadas uma após a outra, caso contrário o tempo será impreciso. Podemos resolver isso colocando os comandos em um script pré-definido através de "define". Se executarmos define checkTime
, o gdb solicitará que insiramos uma lista de comandos. Basta inserir qualquer uma das listas de comandos acima (python/shell) e então você pode chamar o script usando apenas o comando checkTime
. Então, o tempo será preciso. Além disso, você pode colocar define checkTime
a lista de comandos no ./gdbinit
arquivo para não precisar redefini-la manualmente sempre que executar um novo programa.