개요

  • gprofgcc compile suite 에서 제공하는 profiling tool 이다.
  • 이놈은 특정 시간 (기본적으로는 0.01 초) 마다 어떤 함수가 실행되고 있는지를 체크하고 이것으로 각 함수의 호출 빈도와 실행 시간 등의 통계를 내놓는다.
    • 즉, 함수가 호출되는 정확한 빈도를 보여주지는 않는다; 그건 Instrument Function 을 사용하자.
    • 정확한 빈도는 아니지만, 빠르게 함수 호출 추이를 살펴보기에 좋다.

TL;DR

  • 이런 C 코드가 하나 있다고 해보자.
main.c
#include <stdio.h>
 
void print()
{
	printf(format: "example\n");
}
 
int main()
{
	for (int i = 0; i < (1 << 20); i++)
		print();
	return 0;
}
  • 그리고 이놈을 컴파일할때는 -pg 옵션을 주면 된다.
gcc -pg main.c
  • 그리고 컴파일 된 것을 실행하면
./a.out
  • 다음과 같이 gmon.out 파일이 생성된다.

  • 이것을 gprof 명령어를 이용하면 읽기 편하게 변환해준다.
    • 이놈은 표준 출력으로 나오기 때문에, tee> 로 파일로 저장해주면 된다.
gprof ./a.out &> gprof.txt
  • 그럼 다음과 같은 형식으로 나오게 된다.

CMake

  • CMake 를 사용할 때는 CMakeLists 에 이런 옵션을 넣어주거나
add_compile_options(-pg)
add_link_options(-pg)
  • 다음과 같은 command option 을 넣어주면 된다.
cmake -DCMAKE_CXX_FLAGS=-pg \
	-DCMAKE_EXE_LINKER_FLAGS=-pg \
	-DCMAKE_SHARED_LINKER_FLAGS=-pg \
	${PROJECT_ROOT}