gdb의 경과 시간

gdb의 경과 시간

에서 프로그램 실행 경과 시간을 측정하는 방법이 있습니까 gdb?

이것을 보세요:

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

파일을 디버깅하고 임의의 위치에 중단점을 설정한다고 가정합니다. 이제 우리는 무언가를 수행한 다음 명령줄( ) gdb을 사용하여 프로그램이 계속 실행되도록 합니다 .gdbrun

내 질문은 여기에 있습니다. 경과 시간을 측정하고 싶습니다.bp프로그램이 성공적으로 끝나거나 오류가 발생할 때까지.

내 제안은 파일을 사용하는 것입니다 .gdbinit. 해당 파일에서 명령 후 타이머를 시작하기 위해 일부 C 함수를 호출하고 run실행이 끝나면 gettime()C fun도 호출합니다.

따라서 내 의사 코드는 다음과 같습니다( .gdbinit파일).

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

답변1

가장 쉬운 방법은 다음과 같습니다(gdb에 Python이 지원되는 경우).

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

gdb에 Python이 지원되지 않지만 쉘 명령을 실행할 수 있는 경우 다음을 사용하십시오.

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

또는 대상 프로세스를 호출할 수도 있습니다.gettimeofday또는clock_gettime, 그러나 그것은 훨씬 더 지루합니다. 이러한 함수는 프로세스의 주소 공간에 있는 변수에 기록하여 시간을 반환합니다. 이 함수는 아마도 와 같은 것을 호출하여 할당해야 하며 , 중단점이 다른 또는 을 malloc호출하는 도중에 프로그램을 중지한 경우 작동하지 않을 수 있습니다 .mallocfree

그러나 이 솔루션의 약간의 문제는 계속 및 인쇄 결과 줄을 서로 바로 이어서 실행해야 한다는 것입니다. 그렇지 않으면 타이밍이 부정확해질 것입니다. "정의"를 통해 미리 준비된 스크립트에 명령을 넣어 이 문제를 해결할 수 있습니다. 를 실행하면 define checkTimegdb는 명령 목록을 입력하라는 메시지를 표시합니다. 위의 명령 목록(python/shell) 중 하나를 입력한 다음 해당 명령을 사용하여 스크립트를 호출할 수 있습니다 checkTime. 그러면 타이밍이 정확해질 것이다. 또한 새 프로그램을 실행할 때마다 수동으로 다시 정의할 필요가 없도록 파일 define checkTime에 명령 목록을 추가할 수 있습니다../gdbinit

관련 정보