원하는 함수의 원형이 어느 파일에 있는지 알아내려면?
글쓴이: fairycat / 작성시간: 수, 2003/04/23 - 6:06오후
소스 분석하다 처음부터 proc_t 라는 구조체를 만났습니다. 이 넘을 시작으로
줄줄이 윈도에선 보지 못하던 함수들이 마니 텨나오더군요. 윈도에선 msdn
하나만 있으면 어디서 레퍼런스하는지 금방 찾을수 있었는데..(특히 visual
assist를 쓰던 저로서는..) 이거 난감하군요. proc_t라는 구조체가 어디 시스템
헤더 파일들 어딘가에 정의되어 있는 것인지 아니면 프로그래머가 임의로 소스
어딘가에 만들어둔것인지..
이런것들을 알기 위해서 리눅스에선 어떤 방법을 사용합니까? 파일 내에서
grep으로 원하는 줄이 있는지 검색하는것도 있던데요. 이것 역시 어떤 파일
에 있는지 자체는 알아야 하니까 역시 아니구.. 리눅스의 모든 파일을 대상으로
내부에 proc_t라는 문맥을 포함한 파일 검색? 이런식으로 가능할까요? 음..
첫날부터 질문이 너무 많네요. 양해 부탁드리며.. 경험있는 여러분들께 다시
한번 도움을 청해 봅니다.
Forums:
일단 grep만
원하시는 답은 다른 훌륭하신 분들이 달아 주시리라 생각하고.. :wink:
grep은 한 파일에서만 사용할 수 있는게 아니구요.
식으로 사용할 수 있습니다. :)
----------------------------
May the F/OSS be with you..
cscope라는 툴이 있습니다.
남들은 더 멋지게도 쓰던데 전 그냥
typedef 선언, struct 선언, 함수 원형 찾을때만 씁니다.
다운받아 까세요.
cscope xxx.c 하시고,
tab으로 움직인 다음, xxx.c안에 있는 찾고자 하는 대상을
적당한 자리에 쳐넣고 엔터하심 나옵니다.
grep proc_t `find /` 하시면 루트부터 문장에 proc
grep proc_t `find /` 하시면
루트부터 문장에 proc_t 가 포함된 모든 문장이
출력됩니다..
만약, 원하는 keyword가 있는 file이 compile이 제대로 된
만약, 원하는 keyword가 있는 file이 compile이 제대로 된다고 가정하면,
vim
을 사용해서 다음과 같이 쓸 수 있습니다.
커서를 그 위에 올려 놓으시고
^w i
를 누르시면 됩니다.
그렇게 하시면, include path를 찾아서 적당한 file을 windows split 하여 연 후 해당 위치로 이동 시켜 줍니다.
물론, windows split 기능을 잘 이용하신다면, 더더욱 좋겠지요.
^w f
는 커서가 위치한 file을 여는 것으로, 둘을 잘 이용하시면 좋겠죠.
ctags 와 연동하여 사용하는 방법은
^w ]
를 이용하시면 됩니다.
---
http://coolengineer.com
흠..
한마디로 있을건 다 있군요. ^^;;
근데 좀 불편하네요. 아직.. 크크
답변 주신 분들 감사합니다.
좋은 밤 되세요. 퇴근도 못했네여. ㅜ.ㅡ
가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..
- 나루토 <키시모토마사시>
pynoos님 방금 해봤는데..
이거 멋지군요. 그런데 컴파일이 제대로 된다는 가정하에서만..ㅠㅠ
이라는게 좀 안타깝네요. ^^ 함수 이름만 생각날때 원형을 레퍼런스
하면 좋을듯 했는데.. ctags의 사용법은 정말 쉽지가 않네요. ctags
에 대해서만 자세하게 정리된 팁을 찾아봐야 할듯..
가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..
- 나루토 <키시모토마사시>
제가 말하는 컴파일이 제대로 된다는 것은..include 가 제대
제가 말하는 컴파일이 제대로 된다는 것은..
include 가 제대로 되어 있는 상황이라는 것입니다.
---
http://coolengineer.com
아 방금..
좀 더 해보고 나서 깨달았습니다. 이건 그러니까 include가 되어 있는 헤더
파일 중에서 찾는 거로군요. 그렇다면 일단 기존 소스에서 찾아다니는데는
이거 하나면 되겠습니다. :lol: 그렇다면 ctags를 굳이 쓸 필요가 없을것
같은데요? :oops: 감사합니다. ^^ _(_ _)_
가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..
- 나루토 <키시모토마사시>
다른 분들이 좋은 정보 많이 적어두셨네요...일단 find, gr
다른 분들이 좋은 정보 많이 적어두셨네요...
일단 find, grep 명령을 쓰는 것은
find . -exec grep -n -H "(찾을문자열)" {} \;
이면 쫙 찾아줍니다.
그리고, 커널 소스를 검색해주는 웹페이지가 있는데,
http://lxr.linux.no/source
입니다.
좀 더 게으른 방법을 원하신다면, source insight 같은 거에
리눅스 소스 코드 전체를 프로젝트로 집어넣으시면,
바로(!) 찾을 수 있겠죠...
네 갈길을 가라! 남이야 뭐라든!
가장 쉬운 것은 ctags를 쓰는 것이죠.
위와 같이 명령을 내려주면 현재 디렉토리 이하의 모든 .c, .h, .cpp파일을 모두 tag로 만들어 줍니다.
vi에서 바로 해당 함수를 찾아가기 위해서 소스안에서 ^]를 쓸수도 있긴하지만 ,애초에
처럼 내려주면 replace_str함수를 찾아서 바로 열어줍니다. 알아서... vim만 잘써도 좋습니다.
PS)참고로 소스를 분석해서 문서화 하는데는 최근에 doxygen이란 유틸리티를 써봤는데 scope계열의 유틸리티나 cxref 보다 훨씬 좋더군요. 한번 써보시기 바랍니다.
========================================
* The truth will set you free.
아주 유용한 ctags..
너무 편리해서 좋은데 사용법이 까다로워 익힐 엄두를 못내었는데
쉽게 예제를 보여주셔서 감사합니다. 복받으세요~ ^^*
가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..
- 나루토 <키시모토마사시>
방금 해봤는데..
ctags -t `find . -name "*.[(c|h|cpp)]"`
요렇게 써줬는데 ctags: Unknown option: -t 라고 나오네요..ㅠㅠ;
혹시 버전이 틀린건가요? ㅜ.ㅡ
가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..
- 나루토 <키시모토마사시>
댓글 달기