Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿซ ํ•™๊ต/๐Ÿ“Œ ๋ฆฌ๋ˆ…์Šค

[๋ฆฌ๋ˆ…์Šค] cscope ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

๋ฐ˜์‘ํ˜•

 

 

 

 

๐Ÿ”Ž 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๋กœ ํ˜ธ์ถœ ๊ด€๊ณ„์™€ ์‹ฌ๋ณผ ์‚ฌ์šฉ์ฒ˜๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์—ฌ์•ผ๊ฒ ๋‹ค.

๋ฐ˜์‘ํ˜•