Tempo decorrido no gdb

3

Existe uma maneira de medir o tempo decorrido executando o programa em gdb ?

Veja isso:

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

Suponha que estamos depurando um arquivo e, em algum lugar aleatório, definimos um ponto de interrupção. Agora, em gdb , executamos algo e deixamos o programa continuar a execução usando a linha de comando gdb ( run ).

Minha pergunta está aqui. Eu quero medir o tempo decorrido do bp até que o programa termine com sucesso ou ocorra algum erro.

Minha sugestão é usar o arquivo .gdbinit , e nesse arquivo nós chamamos alguma função C para iniciar o temporizador após o comando run e no final da execução também chamamos um gettime() C divertido.

Então, meu pseudo código é um pouco parecido com isto ( .gdbinit file):

break *0x8048452 (random place)
//start time
run
//get time
    
por husin alhaj ahmade 24.09.2016 / 18:44

1 resposta

3

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 do shell, use-o:

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

Como alternativa, você pode fazer com que o processo de destino chame gettimeofday ou clock_gettime , mas isso é muito mais entediante. Essas funções retornam o tempo escrevendo para variáveis no espaço de endereço do processo, o que você provavelmente teria que alocar chamando algo como malloc , e isso pode não funcionar se o ponto de interrupção parou o programa no meio de uma chamada para outro malloc ou free .

    
por 25.09.2016 / 18:02