Tempo decorrido em gdb

Tempo decorrido em gdb

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 gdbrealizamos algo e depois deixamos o programa continuar a execução usando a gdblinha 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 .gdbinitarquivo, e nesse arquivo chamamos alguma função C para iniciar o timer após runo comando e ao final da execução também chamamos de gettime()C fun.

Então, meu pseudocódigo é mais ou menos assim ( .gdbinitarquivo):

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 mallocou 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 checkTimea lista de comandos no ./gdbinitarquivo para não precisar redefini-la manualmente sempre que executar um novo programa.

informação relacionada