원하는 함수의 원형이 어느 파일에 있는지 알아내려면?

fairycat의 이미지

소스 분석하다 처음부터 proc_t 라는 구조체를 만났습니다. 이 넘을 시작으로
줄줄이 윈도에선 보지 못하던 함수들이 마니 텨나오더군요. 윈도에선 msdn
하나만 있으면 어디서 레퍼런스하는지 금방 찾을수 있었는데..(특히 visual
assist를 쓰던 저로서는..) 이거 난감하군요. proc_t라는 구조체가 어디 시스템
헤더 파일들 어딘가에 정의되어 있는 것인지 아니면 프로그래머가 임의로 소스
어딘가에 만들어둔것인지..

이런것들을 알기 위해서 리눅스에선 어떤 방법을 사용합니까? 파일 내에서
grep으로 원하는 줄이 있는지 검색하는것도 있던데요. 이것 역시 어떤 파일
에 있는지 자체는 알아야 하니까 역시 아니구.. 리눅스의 모든 파일을 대상으로
내부에 proc_t라는 문맥을 포함한 파일 검색? 이런식으로 가능할까요? 음..
첫날부터 질문이 너무 많네요. 양해 부탁드리며.. 경험있는 여러분들께 다시
한번 도움을 청해 봅니다.

hey의 이미지

원하시는 답은 다른 훌륭하신 분들이 달아 주시리라 생각하고.. :wink:

grep은 한 파일에서만 사용할 수 있는게 아니구요.

Quote:
grep '문자열' *
또는
grep '문자열' * -r

식으로 사용할 수 있습니다. :)


----------------------------
May the F/OSS be with you..


june8th의 이미지

남들은 더 멋지게도 쓰던데 전 그냥
typedef 선언, struct 선언, 함수 원형 찾을때만 씁니다.

다운받아 까세요.

cscope xxx.c 하시고,
tab으로 움직인 다음, xxx.c안에 있는 찾고자 하는 대상을
적당한 자리에 쳐넣고 엔터하심 나옵니다.

nukdae의 이미지

grep proc_t `find /` 하시면
루트부터 문장에 proc_t 가 포함된 모든 문장이
출력됩니다..

pynoos의 이미지

만약, 원하는 keyword가 있는 file이 compile이 제대로 된다고 가정하면,

vim

을 사용해서 다음과 같이 쓸 수 있습니다.

커서를 그 위에 올려 놓으시고

^w i

를 누르시면 됩니다.

그렇게 하시면, include path를 찾아서 적당한 file을 windows split 하여 연 후 해당 위치로 이동 시켜 줍니다.

물론, windows split 기능을 잘 이용하신다면, 더더욱 좋겠지요.

^w f

는 커서가 위치한 file을 여는 것으로, 둘을 잘 이용하시면 좋겠죠.

ctags 와 연동하여 사용하는 방법은

^w ]

를 이용하시면 됩니다.

fairycat의 이미지

한마디로 있을건 다 있군요. ^^;;
근데 좀 불편하네요. 아직.. 크크
답변 주신 분들 감사합니다.
좋은 밤 되세요. 퇴근도 못했네여. ㅜ.ㅡ

가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..

- 나루토 <키시모토마사시>

fairycat의 이미지

이거 멋지군요. 그런데 컴파일이 제대로 된다는 가정하에서만..ㅠㅠ
이라는게 좀 안타깝네요. ^^ 함수 이름만 생각날때 원형을 레퍼런스
하면 좋을듯 했는데.. ctags의 사용법은 정말 쉽지가 않네요. ctags
에 대해서만 자세하게 정리된 팁을 찾아봐야 할듯..

가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..

- 나루토 <키시모토마사시>

pynoos의 이미지

제가 말하는 컴파일이 제대로 된다는 것은..

include 가 제대로 되어 있는 상황이라는 것입니다.

fairycat의 이미지

좀 더 해보고 나서 깨달았습니다. 이건 그러니까 include가 되어 있는 헤더
파일 중에서 찾는 거로군요. 그렇다면 일단 기존 소스에서 찾아다니는데는
이거 하나면 되겠습니다. :lol: 그렇다면 ctags를 굳이 쓸 필요가 없을것
같은데요? :oops: 감사합니다. ^^ _(_ _)_

가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..

- 나루토 <키시모토마사시>

cleaneye의 이미지

다른 분들이 좋은 정보 많이 적어두셨네요...

일단 find, grep 명령을 쓰는 것은

find . -exec grep -n -H "(찾을문자열)" {} \;

이면 쫙 찾아줍니다.

그리고, 커널 소스를 검색해주는 웹페이지가 있는데,

http://lxr.linux.no/source

입니다.

좀 더 게으른 방법을 원하신다면, source insight 같은 거에

리눅스 소스 코드 전체를 프로젝트로 집어넣으시면,

바로(!) 찾을 수 있겠죠...

네 갈길을 가라! 남이야 뭐라든!

sunyzero의 이미지

ctags -t `find . -name "*.[(c|h|cpp)]"`

위와 같이 명령을 내려주면 현재 디렉토리 이하의 모든 .c, .h, .cpp파일을 모두 tag로 만들어 줍니다.

vi에서 바로 해당 함수를 찾아가기 위해서 소스안에서 ^]를 쓸수도 있긴하지만 ,애초에

vi -t replace_str

처럼 내려주면 replace_str함수를 찾아서 바로 열어줍니다. 알아서... vim만 잘써도 좋습니다.

PS)참고로 소스를 분석해서 문서화 하는데는 최근에 doxygen이란 유틸리티를 써봤는데 scope계열의 유틸리티나 cxref 보다 훨씬 좋더군요. 한번 써보시기 바랍니다.

========================================
* The truth will set you free.

fairycat의 이미지

너무 편리해서 좋은데 사용법이 까다로워 익힐 엄두를 못내었는데
쉽게 예제를 보여주셔서 감사합니다. 복받으세요~ ^^*

가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..

- 나루토 <키시모토마사시>

fairycat의 이미지

ctags -t `find . -name "*.[(c|h|cpp)]"`

요렇게 써줬는데 ctags: Unknown option: -t 라고 나오네요..ㅠㅠ;
혹시 버전이 틀린건가요? ㅜ.ㅡ

가이: 리여.. 확실히 너는 네지와는 다르다
록리: 위로라면 집어치세요..
가이: 위로같은게 아니다 ! 너는 네지와는 다르게 천재도 아니고 재능도 없다 하지만 너는 노력의 천재다..

- 나루토 <키시모토마사시>

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.