함수를 부르는 함수 찾기에 대한 질문 입니다.
글쓴이: hyper9 / 작성시간: 토, 2010/06/19 - 8:58오전
C 언어를 사용해서 program을 작성할 때, aaaa()라는 function을 부르는 function이
a111(), a222(), a333(), a444()...., a999()..
등등인 경우에 aaaa()를 호출하고 있는 function이 누구인지 쉽게 알아내는 방법이 없을까요?
간혹은 이런 경우에 calling function을 찾는데 시간이 많이 걸려서 다른 분들의 know-how를 배우고자 합니다.
조언 부탁드리겠습니다. ^^
Forums:
cscope에 그런 기능이
cscope에 그런 기능이 있는 것으로 알고 있습니다.
자세한 방법은 다음 분께서 해주실 .. ( -_);;
ctags를 사용해 보세요
http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/ctags
소스 인 사이트....
소스 인 사이트 편집기 써보세요...
runtime에 찾고 싶다는 질문인 거죠?
runtime에 호출측을 알고 싶다는 질문인가요?
x86에서는 stack을, arm에서는 link register를 검사해서
호출측의 영역에 주소와 비교하면 됩니다.
자세한건 메뉴얼 참고...
실행 중 함수의 backtrace를 보려면 libc의 backtrace 류의 함수를 사용할 수 있습니다.
ctags는 함수의 선언을 찾을 수 있는데, 호출하는 곳은 찾을 수 없습니다. 대신 grep를 사용할 수 있는데, 속도가 느립니다. 대신, 위에서 말씀하셨던 cscope를 사용하실 수 있습니다.
cscope는 vim에서 plugin을 사용해 쉽게 사용하실 수 있으며, :cs find g 등으로 사용하실 수 있습니다.
cscope보충 설명
vim + cscope에서 특정 함수를 호출하는 곳을 찾을 때는
입니다.
은 그 함수가 정의된 곳을 찾습니다. 함수 내부가 어떻게 구현되었는지 보고싶을 때 사용하죠.
참고로, 함수포인터를 경유해서 그 함수가 불리어질 경우에는
으로 검색이 되지 않습니다. 그럴땐,
으로 그 함수명과 일치하는 심볼을 모두 찾아내는 게 좋을 때가 있습니다.
그 이외에 제가 자주 사용하는 기능들입니다.
근데 말이죠, ":cs find "를 일일이 입력하기가 상당히 귀찮거든요. 그래서, cscope홈페이지에 가보시면, vim용 키맵 플러그인 파일이 있습니다.
http://cscope.sourceforge.net/cscope_maps.vim
이걸 vim플러그인 디렉토리에 복사해 두시면 커서 밑에 있는 단어를 주워서 검색할 수 있습니다. 예를 들어 커서를 foo라는 단어에 둔 상태에서 "Ctrl-백슬래쉬 g" 라고 입력하면, ":cs find g foo"를 실행해 줍니다.
저는 "Ctrl-백슬래쉬" 마저도 귀찮아서 그걸 F11로 매핑해 씁니다...
귀차니즘은 모든 개발자의 미덕이죠...(퍽)
--------------
save the earth
생산적인 댓글을 달자
원글과는
원글과는 관계없지만, 한가지 질문드려봅니다.
혹시 cscope.out 파일을 자동으로 검색하게 할 수 있는 방법 아시나요?
예를 들어 ctags의 tag파일 같은 경우는 .vimrc 파일에
set tag=./tags;/
라고 쓰면 현재 디렉토리에 tags가 없으면 상위디렉토리로 하나씩 올라가면서 찾게 되는데요.
cscope에서는 이걸 하려면 어떻게 하나요??
따로 글타래를 만들어야할까요?
cscope_maps.vim에 있어요
제가 위에서 말씀드린 cscope_maps.vim파일을 열어보면 아시겠지만, vim실행시에 cscope.out을 찾습니다.
먼저 현재 디렉토리에서 찾고, 없으면 환경변수 CSCOPE_DB로 지정된 패스에서 찾나보네요.
전 항상 작업중인 소스트리의 제일 상위 디렉토리에서 cscope 데이터베이스 파일을 만들고, 그 디렉토리에 있는 아무런 소스파일 하나를 vim으로 열어서 작업을 시작합니다.
--------------
save the earth
생산적인 댓글을 달자
그렇게 할 수도
그렇게 할 수도 있겠군요..
그런데 저는 vimrc에서 autochdir을 on시켜놓고 쓰다보니, cwd가 계속 바뀝니다.
이런 경우에 상대적인 디렉토리를 제대로 해석해서 이동하는 것을 못하는군요..
autochdir은 디렉토리별로 make파일이 있어서 이동한 후에 make하거나,
:e 로 같은 디렉토리의 다른 파일을 열거나 할 필요가 있어서 on 시켜놓고 씁니다.
autochdir도 되면서 cscope도 잘 쓸 수 있으면 좋겠는데 일단 하나만 선택해야겠군요..
점점 오프토픽이 되어가지만...
vim에 autochdir 이라는 기능이 있는 줄은 몰랐습니다. 감사합니다.
그렇지만, 전 디렉토리 이동이나 다른 파일 열기를 할 때 :E 로 하다보니 autochdir 을 쓰지않아도 그리 불편한지는 모르겠네요.
autochdir 을 켜더라도 cscope 인덱스파일을 모두 절대경로로 작성하면 아마 문제없이 쓰실 수 있을 겁니다.
--------------
save the earth
생산적인 댓글을 달자
진짜로
진짜로 오프토픽이지만,
저는 :E 를 몰랐습니다.. ^^;;
:E를 쓴다면 autochdir을 안 써도 될것 같네요.. 역시 지식은 나누어야.. ^^
전 $HOME/.vimrc 에서 cs
전 $HOME/.vimrc 에서 cs add cscope.out 해놓고 씁니다.
이미 알고계실수도 있겠지만,
저도 예전부터 궁금해하던건데 오늘에서야 답을 찾게 되었네요..
http://vim.wikia.com/wiki/Autoloading_Cscope_Database
댓글 달기