2012-03-27 11 views
8

Oto problem, który ostatnio miałem, który jest po prostu zwykłym bólem dla innych.Jak szybko wyszukać wszystkie zawarte pliki nagłówkowe w projekcie dla określonej funkcji lub makra?

Pracuję z innym cudzym kodowaniem C i muszę znaleźć miejsce zdefiniowania funkcji lub makra. Kod #include to zbiór różnych standardowych bibliotek systemowych oprócz tych z konkretnego projektu.

Czy istnieje narzędzie lub technika, aby szybko znaleźć miejsce, w którym zdefiniowano konkretną funkcję, makro (lub inne globalne)?

Próbowałem:

grep -R 'function' /usr/lib 

i inne podobne * nix/bash-fu tylko z ograniczonym sukcesem i wiele irytujących plew do uboju. Jeden z was, mędrców koderów, musi mieć dobre rozwiązanie tego pozornie powszechnego scenariusza.

Byłem bardzo zaskoczony, nie znajdując innego pytania na temat tego szczególnego bólu tutaj lub w moich poszukiwaniach interwebs. (Jestem pewny, że będą złe komentarze, jeśli przegapię jedną ... ;-))

Z góry dziękuję za wszelkie wskazówki!

+1

Mamy połączenie Opengrok i Doxygen, który pomaga nieco ... – BoBTFish

Odpowiedz

4

Zastosowanie etags/ctags z exuberant ctags project w połączeniu z edytorze (Emacs vim), które je rozumie lub GNU GLOBAL.

Aha, a jeśli użyjesz automake, generuje cel TAGS. Nie ma więc potrzeby wykonywania skomplikowanych połączeń ręcznych pod numerem {c,e}tags.

+0

Dzięki. Chociaż wcześniej używałem ctags, nie zdawałem sobie sprawy, że mogę ich użyć do istniejących bibliotek systemowych. Lubię zdolność GNU GLOBAL do pokazywania instancji funkcji (np. Odwrotne mapowanie tego, co robi CTAGS). – JJC

1

Stosować ctags cscope +/vim/emacs

można google dla ich szczegółów użytkowania.

jeśli używasz ctags + Vima można:

1.Go do katalogu /usr/include, excute ctags -f tags1 -R . generować tagi

tagów 2.generate dla kodu w katalogu kodu ctags -f tags2 -R.

3.run :set path+=tags1,tags2 w vim

4.under funkcji lub marco spróbować CTRL+]

0

vim + ctags to droga. można przejść do definicji funkcji, zmiennych globalnych, makra itp itd

FYI, browsing programs with tags

Ponadto, jeśli chcesz szybko przełączać się między .c oraz pliki .h, należy zapoznać się this blog

0

można łatwo użyć cscope lub emacs/vim + xcscope.el.Myślę, że to pałka niż napięcie i etage.

0

Pod warunkiem, że dołączono poprawne nagłówki, które bezpośrednio lub pośrednio definiują to, czego szukasz, większość IDE ma funkcjonalność "skok do definicji", która działa.

Podejścia tagów są oczywiście dobre, ponieważ nie zależą od poprawnie zawartych nagłówków.

1

Oto, co możesz zrobić, zakładając, że używasz gcc, jeśli nie tylko odpowiednio go modyfikujesz.

gcc -E myfile.c | grep '^#' | cut -f 3 -d ' ' | sort |uniq | xargs -n 1 grep -l "MYMACROORFUNCTIONNAME"