๋ชฉ์ฐจ (OPEN)
๐ cscope๋
[๋ฆฌ๋ ์ค] ctags ์ค์น ๋ฐ ์ฌ์ฉ ๋ฐฉ๋ฒ
๋ชฉ์ฐจ (OPEN)๐ท๏ธ ctags๋๐ ๏ธ ์ค์น ๋ฐ ๊ฐ๋จํ ์ค์ต๐ ๊ฒฐ๋ก ๐ท๏ธ ctags๋ctags๋ฅผ ์ฝ๊ฒ ์ดํดํ๋ ค๊ณ ๊ณ ๋ฏผํ๋ค ๋ณด๋,๋ฐฑ๊ณผ์ฌ์ ์ ์ธ๋ฑ์ค(์ฐพ์๋ณด๊ธฐ)์ ๋น์ทํ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์๋ฅผ ๋ค์ด, ์ธ๋ฑ์ค์์ '
sso-codingdiary.tistory.com
์์ ํฌ์คํ ์์ ๋ดค๋ ctags๊ฐ ์ ์๋ก ์๊ฐ์ด๋ํ๋ ์ธ๋ฑ์ค(์ฐพ์๋ณด๊ธฐ)๋ผ๋ฉด,
cscope๋ ์ ํ๋ง์ผ๋ก ๋น์ ํด์ ์ดํดํด๋ณผ ์ ์๋ค.
์ฐ๋ฆฌ ๋ฐ์ '์์ฐ, ์๋ฏผ, ์ง๋ฏผ, ์ฑ์ฐ, ๋ฏผ์'๋ผ๋ ์น๊ตฌ๊ฐ ์๊ณ ,
๋ฐ์ฅ์ด ์๋์ ๋ ๊ฐ์ง๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์๋ค๊ณ ํด๋ณด์.
1) ์ฐ๋ฝ์ฒ ์นด๋ํจ
- ๊ฐ ์น๊ตฌ์ ์ด๋ฆ๊ณผ ์ ํ๋ฒํธ๊ฐ ์ ํ ์นด๋ (== ์ ์)
2) ํตํ ๊ธฐ๋ก์ฅ (์ ํ๋ง)
- '๋๊ฐ ๋๊ตฌ์๊ฒ ์ ํํ๋์ง'๋ฅผ ํ์ดํ๋ก ๊ทธ๋ ค๋ ์ ํ๋ง
ex) ๋ฏผ์ ๐๐ป ์ง๋ฏผ, ๋ฏผ์ ๐๐ป ์์ฐ, ์์ฐ ๐๐ป ์๋ฏผ
์ฌ๊ธฐ์ ๋ฐ์ฅ์ด "๋ฏผ์๊ฐ ๋๊ตฌํํ ์ ํํ์๋๋ผ?" ํ๊ณ ๋ฌผ์ด๋ณด๋๊ฒ, cscope d ์ ๋์ผํ ์๋ฏธ์ด๋ค.
์ฝ๋์ฒ๋ผ ๋งํ์๋ฉด minsu( )๋ผ๋ ํจ์๊ฐ ๋ด๋ถ์์ ํธ์ถํ๋ ํจ์๋ค(callee)์ ๋ชฉ๋ก์ ์ฐพ์์ฃผ๋ ๊ฒ์ด๋ค.
์ด๋ฒ์๋ ๋ฐ์ฅ์ด "๋๊ฐ ์๋ฏผ์ดํํ ์ ํํ๋๋ผ?" ํ๊ณ ๋ฌผ์ด๋ดค๋ค๋ฉด, ์ด๋ cscope c ์ ๋์ผํ ์๋ฏธ์ด๋ค.
์ฝ๋์ฒ๋ผ ๋งํ๋ฉด, ๋๊ฐ sumin( )์ด๋ผ๋ ํจ์๋ฅผ ํธ์ถํ๋์ง(caller)๋ฅผ ๋ฌป๋ ๊ฒ์ด๋ค.
์ด์ฒ๋ผ ๊ฐ๋จํ ์์๋ก ๋ด์ ์ฝ๊ฒ ์ง๋ง, ๋ง์ฝ ์ฐ๋ฆฌ์ ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด์ ํ์ผ์ด ์ ์ ๋ง์์ง๋ฉด,
"์ด ํจ์๋ ๋๊ฐ ๋ถ๋ฅด์ง?", "์ด ์ฌ๋ณผ์ด ์ด๋์ ์ฐ์ด๊ณ ์์ง?", "์ ์๋ ์ด๋ ์์ง?" ๊ฐ์ ์ง๋ฌธ์ด ๋ง์์ง๊ฒ ๋๋๋ฐ,
์ด๋ฅผ ๋น ๋ฅด๊ฒ ํ์ํด์ฃผ๋ ๊ฒ์ด cscope๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
๐ ๏ธ ์ค์น ๋ฐ ๊ฐ๋จํ ์ค์ต
1) ์ค์น
์ฐ๋ถํฌ์์ ํฐ๋ฏธ๋์ ์ด์ด ์๋์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๊ฐ๋จํ๊ฒ ์ค์น๊ฐ ์๋ฃ๋๋ค.
sudo apt update
sudo apt install -y cscope
2) ์ฐ์ต์ฉ ํด๋ ๋ง๋ค๊ธฐ
mkdir -p ~/cscope-test
cd ~/cscope-test
3) ์์ ์ฝ๋ ํ์ผ ๋ง๋ค๊ธฐ
[ calc.c ]
int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }
[ util.c ]
int square(int x) { return x * x; }
int twice(int x) { return add(x, x); } // add๋ฅผ ๋ถ๋ฆ
[ main.c ]
#include <stdio.h>
int add(int, int);
int mul(int, int);
int square(int);
int twice(int);
int main() {
printf("%d\n", add(2, 3));
printf("%d\n", mul(2, 3));
printf("%d\n", square(4));
printf("%d\n", twice(5));
return 0;
}
4) ํ์ผ ๋ชฉ๋ก ๋ง๋ค๊ธฐ
cscope๋ ์ด๋ค ํ์ผ์ ์ธ๋ฑ์ฑํ ๊ฑด์ง ๋ชฉ๋ก์ ์ง์ ์ ๋ ฅํด์ค์ผ ํ๋ค.
๋๋ ํ์ฌ .c ํ์ผ๋ค๋ง ๋ง๋ค์์ผ๋๊น ์๋์ ๋ช ๋ น์ด๋ก ๊ฐ๋จํ๊ฒ ๋ชฉ๋ก์ ๋๊ฒจ์คฌ๋ค.
find . -name "*.[c]" > cscope.files

๊ทธ๋ฌ๋ฉด ์์ ์ฌ์ง๊ณผ ๊ฐ์ด cscope.files๊ฐ ์๊ธด ๊ฒ์ ํ์ธํ ์ ์๋ค.
(์ฌ์ง์์๋ ์คํ ๋๋ฌธ์ ccope.files๋ผ๊ณ ๋ฌ๋ค..)
์ด๋ค ํ์ผ๋ค์ด ๋์ด๊ฐ๋์ง ํ์ธํ๊ณ ์ถ์ผ๋ฉด ์๋์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
cat cscope.files

5) ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
์๋์ ๋ช ๋ น์ด๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.
cscope -b -q -i cscope.files
๊ทธ๋ฌ๋ฉด ์๋์ ์ฌ์ง๊ณผ ๊ฐ์ด cscope.out, cscope.in.out, cscope.po.out ํ์ผ์ด ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.

์ด๋ ๊ฐ๊ฐ์ ์ต์ ์ ๋ํด์ ๊ฐ๋จํ ์ค๋ช ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- -b (build only)
- DB๋ง ๋ง๋ค๊ณ , ์ธํฐ๋ํฐ๋ธ ๋ชจ๋๋ก ๋ค์ด๊ฐ์ง ์๋๋ค๋ ์๋ฏธ
- ์ด๊ฑธ ์ ๋ถ์ด๋ฉด DB๋ฅผ ๋ง๋ ๋ค์์ ๊ณง๋ฐ๋ก cscope ๊ฒ์์ฐฝ์ ๋ค์ด๊ฐ ๋ฒ๋ฆฐ๋ค.
- -q (quick index)
- cscope.in.out, cscope.po.out ๊ฐ์ ์ถ๊ฐ ์ธ๋ฑ์ค ํ์ผ์ ๋ง๋ค์ด์ ๊ฒ์ ์๋๋ฅผ ํฌ๊ฒ ์ฌ๋ฆฐ๋ค.
- ์ฌ์ค์ ๊ฑฐ์ ํ์ ์ต์ ์ด๋ผ๋๋ฐ, ํ๋ก์ ํธ ํ์ผ์ด ๋ง์์ง์๋ก ์๋ ์ฐจ์ด๊ฐ ์ฒด๊ฐ๋๋ค๊ณ ํ๋ค.
- -i cscope.files
- DB๋ฅผ ๋ง๋ค ๋, ์ด ํ์ผ ๋ชฉ๋ก์ ์ ํ ์์ค๋ง์ ๋์์ผ๋ก ํ๋ผ๋ ์๋ฏธ
- ์ด๊ฑธ ์ ๋ถ์ด๋ฉด cscope๊ฐ ํ์ฌ ๋๋ ํ ๋ฆฌ ์ ์ฒด๋ฅผ ๊ธ์ด๊ฐ๊ธฐ ๋๋ฌธ์
.git์ด๋ build/ ๊ฐ์ ๋ถํ์ํ ํด๋๊น์ง ๋ค์ด๊ฐ์ ์ด๋ ๊ฒ ๋ฒ์๋ฅผ ์ง์ ํด๋๊ณ ํ๋ค๊ณ ํ๋ค.
6) ์ง์ ๊ฒ์ํด๋ณด๊ธฐ
์ด์ ์๋์ ๋ช ๋ น์ด๋ฅผ ์ณ์ ๋ง๋ค์ด์ง cscope.out ํ์ผ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ด์ด๋ณด์.
cscope -d

๊ทธ๋ฌ๋ฉด ์ ์ฌ์ง์ฒ๋ผ cscope ์ ์ฉ ํ๋ฉด์ด ๋จ๊ณ , ํ๋จ์ ์ฌ๋ฌ ๊ฐ์ง ๊ฒ์ ๋ฉ๋ด๊ฐ ํ์๋๋ค.
์ด์ค์์ ์ํ๋ ํญ๋ชฉ์ ์ ํํด์ ๊ฒ์ํ๋ฉด ๋๋๋ฐ,
๋๋ Find this global definition์ ์ด์ฉํด์ addํจ์๋ฅผ ๊ฒ์ํด๋ดค๋ค.

๊ทธ๋ฌ๋๋ ์ด๋ ๊ฒ ๋ฐ๋ก add ํจ์๊ฐ ์ ์๋ ํ์ผ๊ณผ ํด๋น ์์ค ์ฝ๋ ๋ผ์ธ์ ๋ณด์ฌ์ฃผ์๋ค.
๋ค์์ผ๋ก๋ Caller๋ฅผ ์ด๋ป๊ฒ ์ฐพ์ ์ ์๋์ง๋ ํ์ธํด๋ณด์๋ค.
๋จผ์ ํ๋ก์ ํธ ๋ฃจํธ์์ ์๋์ ๋ช ๋ น์ด๋ก vim์ ์คํํด์ค๋ค.
vim main.c
๋ค์์ผ๋ก vim ์๋์ ์๋์ ๋ช ๋ น์ด๋ค์ ์ ๋ ฅํด์ค์ผ ํ๋ค.
์ด๊ฑฐ๋ ํ ๋ฒ๋ง ์ฐ๊ฒฐํด์ฃผ๋ฉด, ๊ฐ์ ์ธ์ ์์์๋ ๊ณ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค.
:cs add cscope.out
:cs reset
์ด์ caller๋ฅผ ํ์ํ๊ธฐ ์ํด ์๋์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
๋๋ ๋๊ฐ add ํจ์๋ฅผ ํธ์ถํ๋์ง ํ์ธํด๋ณด๊ณ ์ถ์ด์ ์๋์ฒ๋ผ ํด์ฃผ์๋ค.
:cs find c add
๊ทธ๋ฌ๋๋ ์๋์ ์ฌ์ง๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์๋ค.

callee๋ฅผ ํ์ํ๊ณ ์ถ์ผ๋ฉด ์๋์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
:cs find d ์ํ๋๊ฑฐ
๐ ๊ฒฐ๋ก
์ด๋ฒ์ cscope๋ฅผ ์ง์ ์ค์นํ๊ณ ์ฌ์ฉํด๋ณด๋ฉด์
๋จ์ํ ์ฝ๋ ๊ฒ์ ๋๊ตฌ๊ฐ ์๋๋ผ, ํจ์์ ํจ์ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํ๋์ ๋ณด์ฌ์ฃผ๋ ๋งค์ฐ ํธ๋ฆฌํ ๋๊ตฌ์์ ์ฒด๊ฐํ ์ ์์๋ค.
ํนํ callers์ callees๋ฅผ ๋ฐ๋ก ํ์ธํ ์ ์๋ค๋ ๊ฒ ์ธ์๊น์๋๋ฐ,
๊ธฐ์กด์ ctags๋ ๋จ์ํ ์ ์๋ง ์ฐพ์๊ฐ๋ ๊ฑฐ์๊ธฐ ๋๋ฌธ์
์กฐ๊ต๋์ด cscope๊น์ง ์ค์นํ๋ผ๊ณ ํ ๊ฑฐ ์๋๊น ์ถ์๋ค.
์์ผ๋ก๋ ctags๋ก ์ ์๋ฅผ ๋น ๋ฅด๊ฒ ์ค๊ฐ๊ณ ,
cscope๋ก ํธ์ถ ๊ด๊ณ์ ์ฌ๋ณผ ์ฌ์ฉ์ฒ๋ฅผ ํ์ํ๋ ์ต๊ด์ ๋ค์ฌ์ผ๊ฒ ๋ค.
'๐ซ ํ๊ต > ๐ ๋ฆฌ๋ ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ฆฌ๋ ์ค] GitHub `git clone` ์ธ์ฆ ์๋ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ (Ubuntu + VirtualBox) (0) | 2025.09.23 |
|---|---|
| [๋ฆฌ๋ ์ค] VirtualBox ์ ์ฒด ํ๋ฉด ์ค์ ํ๊ธฐ (0) | 2025.09.23 |
| [๋ฆฌ๋ ์ค] ์ด์์ฒด์ ์ ์ปค๋ (4) | 2025.09.17 |
| [๋ฆฌ๋ ์ค] ctags ์ค์น ๋ฐ ์ฌ์ฉ ๋ฐฉ๋ฒ (0) | 2025.09.17 |
| [๋ฆฌ๋ ์ค] Windows 11์์ VirtualBox Ubuntu ์คํ ์๋ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ (VERR_NEM_VM_CREATE_FAILED) (0) | 2025.09.17 |