2013-02-16 18 views
7

Wszystkie samouczki Cscope, które znalazłem w Internecie, mówią o tym, jak używać trybu interaktywnego cscope do wyszukiwania symboli w edytorach, takich jak vim i emacs. Ale myślę, że powinno być możliwe, aby wydać polecenie w terminalu, aby zrobić coś jakcscope: Jak używać cscope do wyszukiwania symbolu za pomocą linii poleceń?

cscope -d -some_options <my symbol> 

I będę mógł zobaczyć listę wyników w standardowe wyjście, zamiast wprowadzić ncurse UI i zrobić tam wszystko . Myślę, że jest to możliwe, ponieważ "jedyny" program do przeglądania frontbeli może robić takie rzeczy w swoim interfejsie TclTK. Ale kod niestety jest zupełnie poza mną.

Jednak nie znalazłem dokumentacji na temat tej możliwości.

Czy marzę, czy istnieje nieudokumentowany sposób robienia tego?

Dzięki!

UPDATE

Pewien postęp: Jeśli zrobię mały projekt z kilku plików o strukturze sub-dir. Odpowiedź Rici działa po wyjęciu z pudełka. Z większym projektem (tysiące plików o złożonej strukturze folderów). Nawet z plikami cscope.out i cscope.files znajdującymi się w katalogu głównym projektu (także mojego bieżącego katalogu roboczego), nie otrzymałem nic z tego samego polecenia i tego samego symbolu. Podejrzewam, że z poleceniem występuje problem skalowalności. Próbowałem również polecenia

bezskutecznie.

UPDATE

skrajnie dziwaczne! Próbowałem użyć innych symboli. Okazało się, że szczególny symbol, którego szukałem, nie może zostać wyświetlony za pomocą wiersza poleceń. Ale wszystkie inne symbole, które próbowałem, działały. I cbrowser nie ma problemu ze znalezieniem tego "nieudanego" symbolu. W każdym razie, miałem pecha. Zadam osobne pytanie o tę anomalię w linii poleceń.

Zaznaczam odpowiedź rici jako poprawną.

+0

używam [ 'grep'] (http : //pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html): 'grep -options * .c' – pmg

+2

Ale to jest wyszukiwanie zwykłego tekstu. cscope jest znacznie bardziej precyzyjny. – kakyo

+0

Dobrze, ale czasami nie potrzebujesz działa do zabicia jednej muchy. – pmg

Odpowiedz

1

Można zadzwonić Cscope z wersją do przeszukiwania rekurencyjnej -R.Na przykład:

cscope -d -f/path/to/cscope.out -R -L1 some_symbol 

(szuka definicji some_symbol)

cscope -d -f/path/to/cscope.out -R -L3 some_symbol 

(pokazuje wszystkie lokalizacje gdzie some_symbol się nazywa)

można pominąć opcję -f jeśli cscope.out znajduje w bieżącym katalogu roboczym.

Należy zauważyć, że powyższe wywołanie przynosi zerowe wyniki dla indeksowanego symbolu, jeśli pominięto -R. Bardzo stare wersje cscope nie obsługują -R. Na przykład wersja 15.8a obsługuje to.

Lista możliwych wartości dla -L jest:

0: Find this C symbol 
1: Find this definition 
2: Find functions called by this function 
3: Find functions calling this function 
4: Find this text string 
6: Find this egrep pattern 
7: Find this file 
8: Find files #including this file 
9: Find places where this symbol is assigned a value 

Opcja -R może być również używany podczas tworzenia pliku cscope.out, np:

cscope -bR 
15

Prawdopodobnie patrząc na to:

cscope -L1<symbol> 

Można użyć -d jak dobrze, chociaż jeśli modyfikowania plików, to jest dobre dla Cscope zaktualizować swojej bazie danych.

-L znaczy „wykonać jedną komendę linii zorientowanych”, a następna cyfra (1 w tym przypadku), co może również zostały napisane jako osobna opcja jest właściwa komenda, której podręcznika myląco nazywa " pole". "Pola" są podane przez interaktywny monit cscope; Dodałem cyfrę dla wygody. "ten" odnosi się do tekstu następującego po cyfrze; pamiętaj, że jest to wzór, więc nie musisz koniecznie wpisywać pełnego symbolu.

0 Find this C symbol: 
1 Find this function definition: 
2 Find functions called by this function: 
3 Find functions calling this function: 
4 Find this text string: 
5 Change this text string: 
6 Find this egrep pattern: 
7 Find this file: 
8 Find files #including this file: 
+0

Próbowałem twojej linii "cscope -d -L1 " pod folderem, w którym znajduje się mój cscope.out. Niestety nie dało mi to nic. Z drugiej strony, wypalanie "cbrowser" w tej samej lokalizacji, mogę przesłać to samo zapytanie i wyniki są wyświetlane w interfejsie użytkownika. Czy czegoś brakuje? Próbowałem linii poleceń zi bez spacji między opcją a argumentem symbolu. – kakyo

+0

@kakyo: Wszystko, co mogę powiedzieć, to to, że działa dla mnie. W rzeczywistości nie wpisałeś '<' and '>', prawda? Czy próbowałeś usunąć cscope.out i zezwolić cscope na jego przebudowanie (tj. Bez użycia flagi -d)? – rici

+0

Nie, wiem, że symbol nie pochodzi z <> samoczynnie :). Po prostu próbowałem usunąć cscope.out, a następnie "scope -L1 ". Ku mojemu zaskoczeniu cscope nie wygenerował pliku w locie; zamiast tego otrzymałem "cscope: nie znaleziono plików źródłowych". Czy to dlatego, że mój kod znajdował się w podfolderach względem cscope.out? Czy muszę określać pliki źródłowe w tym poleceniu? – kakyo