gdb의 경과 시간

gdb의 경과 시간

프로그램을 실행하는데 걸리는 시간을 측정할 수 있는 방법이 있나요 gdb?

확인 해봐:

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

파일을 디버깅하고 임의의 위치에 중단점을 설정한다고 가정해 보겠습니다. 이제 몇 가지 작업을 수행한 다음 명령줄( )을 사용하여 gdb프로그램을 계속 진행합니다.gdbrun

내 문제는 다음과 같습니다. 측정하고 싶습니다.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 checkTimegdb는 명령 목록을 묻는 메시지를 표시합니다. 위에 나열된 명령(python/shell) 중 하나를 입력하면 해당 명령을 사용하여 스크립트를 호출할 수 있습니다 checkTime. 그러면 시간이 정확해질 것이다. 또한 새 프로그램을 실행할 때마다 수동으로 다시 정의할 필요가 없도록 define checkTime이 파일에 명령 목록을 넣을 수 있습니다 ../gdbinit

관련 정보