【18.04 LTS】 ctags 사용하기

소스 코드를 분석하거나 추적할 때 유용한 툴인 ctags에 대해서 포스팅하도록 하겠습니다. ctags를 사용하면 소스 코드의 변수나 함수 등을 추적할 수 있습니다. 설치는 아래의 명령어를 터미널에 입력하면 됩니다.

 

sudo apt-get install ctags

 

사용 방법에 대해서 설명해 드리도록 하겠습니다. 현재 분석하고자 하는 소스 코드의 태그 정보를 만들어야 합니다. 여기서 주의해야 할 점은 바로 소스 코드의 최상의 디렉터리에서 만들어야 합니다. 그렇지 않으면 하위 디렉터리에 대한 태그 정보를 얻을 수 없기 때문입니다. 예시를 드리기 위해서 리눅스 커널 소스 코드를 분석한다고 했을 때 커널의 최상의 경로에서 태그 정보를 만들어줘야 합니다.

 

 

그림과 같이 커널 소스 코드입니다. 커널 소스 코드를 분석하기 위해서 태그 정보를 만듭니다. 다음 명령어를 입력합니다.

 

ctags -R

 

이 명령어는 태그 정보 파일을 만듭니다. 만약에 태그 정보 파일을 만들지 않을 경우 "ctags *"로 사용하시면 됩니다. 명령어를 입력하면 아래 그림처럼 태그 파일(tags)이 만들어진 것을 확인하실 수 있습니다.

 

 

tags 파일에는 리눅스 소스 코드에 대한 전체 태그 정보들이 저장되어 있습니다. 어떤 식으로 되어 있는지 궁금하시다면 한번 열어서 확인해 보시기 바랍니다. 이제 분석을 위해 파일을 열 때 주의해야 할 일이 있습니다. 무조건 파일은 최상의 경로에서 경로를 찾아서 파일을 열어야 합니다. 이유는 최상위 디렉터리에서 태그 정보 파일을 만들었기 때문에 다른 디렉터리로 이동하여 파일을 열면 안 됩니다. 예를 들어 "drivers/i2c/busses/i2c-amd-mp2-pci.c" 파일을 분석한다고 했을 때 "drivers/i2c/busses/" 폴더로 이동하여 파일을 열면 안 됩니다. 그렇게 되면 ctags 기능을 사용할 수 없습니다.

 

그럼 "drivers/i2c/busses/i2c-amd-mp2-pci.c" 파일을 분석한다고 하고, vi로 파일을 엽니다.

 

vi drivers/i2c/busses/i2c-amd-mp2-pci.c

 

파일을 열고 맨 위의 함수 하나를 보겠습니다.

 

 

소스 코드 중에서 amd_mp2_dev 구조체에 대한 원형을 보고 싶다고 가정했을 때, 저 구조체가 어디 있는지 우린 검색하거나 찾아야 합니다. 하지만 ctags 기능을 사용하면 추적이 가능합니다. "amd_mp2_dev" 구조체 이름 명에 커서를 가져다 놓고 "Ctrl + ]"를 키보드로 입력합니다. 그러면 "amd_mp2_dev" 구조체가 정의된 파일로 이동됩니다.

 

 

다음으로 이전 단계로 복귀하고 싶다면 "Ctrl + t"를 입력하시면 첫 번째 소스코드의 화면으로 돌아옵니다. 이렇게 사용하시면 소스 코드의 추적 등 분석하시는데 도움이 됩니다. 참고로 ctags의 기능은 아래와 같이 추가적으로 있습니다.

 

명령어 설명
Ctrl + ] 함수나 변수가 정의된 곳으로 이동
Ctrl + t 이동하기 전 단계로 복귀
:tjump tselect와 비슷하지만 목록을 보지 않고 검색한 결과로 점프
:tnext 태그 목록의 다음 태그 위치로 이동
:tprev 태그 목록의 이전 태그 위치로 이동
:tfirst 태그 목록의 첫 번째 위치로 이동
:tlast 태그 목록의 마지막 위치로 이동
:tags 태그 점프 기록을 볼 수 있음
:tselect <function-name> 함수 이름을 검색하여 여러개일 경우 목록을 보여줌

 

주요 사용하는 것 위주로 작성했으며, 대부분 "Ctrl + ]"와 "Ctrl + t"만 사용합니다.

'플랫폼 > 우분투' 카테고리의 다른 글

【18.04 LTS】 화면 잠금  (0) 2023.10.05
【18.04 LTS】 전원 설정  (0) 2023.09.27
【18.04 LTS】 VIM 설치하기  (0) 2023.09.27
【18.04 LTS】 gcc 컴파일러 설치  (0) 2023.09.27
【18.04 LTS】 net-tools 설치하기  (0) 2023.09.27

이 글을 공유하기

댓글

Designed by JB FACTORY