프로그램을 실행하는데 걸리는 시간을 측정할 수 있는 방법이 있나요 gdb
?
확인 해봐:
<------------bp---------------------------------->
파일을 디버깅하고 임의의 위치에 중단점을 설정한다고 가정해 보겠습니다. 이제 몇 가지 작업을 수행한 다음 명령줄( )을 사용하여 gdb
프로그램을 계속 진행합니다.gdb
run
내 문제는 다음과 같습니다. 측정하고 싶습니다.BP프로그램이 성공적으로 종료되거나 오류가 발생할 때까지.
.gdbinit
내 제안은 명령 후 타이머를 시작하기 위해 일부 C 함수를 호출하고 run
실행이 끝나면 C fun도 호출하는 파일을 사용하는 것입니다 gettime()
.
따라서 내 의사코드는 다음과 같습니다( .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
또는 대상 프로세스 호출을 할 수 있습니다하루 중 시간 가져오기또는시계는 시간을 얻다, 그러나 이것은 훨씬 더 지루합니다. 이러한 함수는 프로세스 주소 공간의 변수에 기록하여 시간을 반환합니다. 다음과 같은 것을 호출하여 이러한 변수를 할당해야 할 수도 있습니다 malloc
. 중단점이 malloc
다른 또는 을 호출하는 도중에 프로그램을 중지 하면 작동하지 않을 수 있습니다 free
.
그러나 이 솔루션의 작은 문제는 계속 및 인쇄 결과 줄을 서로 바로 이어서 실행해야 한다는 것입니다. 그렇지 않으면 타이밍이 부정확해집니다. "정의"를 통해 미리 설정된 스크립트에 명령을 입력하면 이 문제를 해결할 수 있습니다. 를 실행하면 define checkTime
gdb는 명령 목록을 묻는 메시지를 표시합니다. 위에 나열된 명령(python/shell) 중 하나를 입력하면 해당 명령을 사용하여 스크립트를 호출할 수 있습니다 checkTime
. 그러면 시간이 정확해질 것이다. 또한 새 프로그램을 실행할 때마다 수동으로 다시 정의할 필요가 없도록 define checkTime
이 파일에 명령 목록을 넣을 수 있습니다 ../gdbinit