2013-02-16 16 views
7

私がオンラインで見つけたcscopeチュートリアルは、vimやemacsなどのエディタでシンボルを検索するためにcscopeの対話モードを使用する方法について話しました。しかし、私はcscope:cscopeを使用してコマンドラインを使ってシンボルを検索するには?

cscope -d -some_options <my symbol> 

ような何かをするために、端末にコマンドを発行することは可能であるべきだと思うと私が代わりにncurse UIを入力することで、標準出力に結果の一覧を見ることができるはずですし、そこに全力を尽くします。私はこれが可能だと思うのは、 "唯一の"フロントエンドのブラウザは、TclTKのUIのようなことをすることができるからです。しかし、コードは残念ながら私をかなり超えています。

ただし、この機能についてのドキュメントは見つかりませんでした。

私は夢を見ているのですか、これを行うための文書化されていない方法がありますか?

ありがとうございます!

UPDATE

いくつかの進捗状況:私はサブディレクトリ構造を持ついくつかのファイルの小さなプロジェクトを作成した場合。そして、riciの答えは箱から出てきます。より大きなプロジェクト(複雑なフォルダ構造を持つ何千ものファイル)で。 cscope.outとcscope.filesがプロジェクトフォルダのルート(現在の作業ディレクトリ)にあっても、同じコマンドと同じシンボルから何も得られません。私はコマンドにスケーラビリティの問題があると考えています。私もコマンドを試しました

cat cscope.files | xargs cscope -d -L1 <symbol> -i 

私は利用できません。

UPDATE

非常に奇妙な!他の記号を使ってみました。私が探していた特定のシンボルは、コマンドラインを使って表示できないことが判明しました。しかし、私が試みた他のシンボルはすべて働いた。そして、cbrowserは "失敗"シンボルを見つけるのに問題はありません。とにかく、私はちょうど不運だった。コマンドラインでこの異常に関する別の質問をします。

私はriciの答えを正しいとマークしました。

+0

私は[ 'grep'](HTTPを使用します://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html): 'grep -options * .c' – pmg

+2

これはプレーンテキスト検索です。 cscopeははるかに正確です。 – kakyo

+0

そうだけど、たまに1つのフライを殺すために大砲は必要ないこともある。 – pmg

答えて

1

あなたは再帰的な検索のための-Rバージョンでのcscopeを呼び出すことができます。たとえば、次のように

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

(some_symbolの定義を検索)

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

(some_symbolが呼び出されたすべての場所を示している)cscope.outが配置されている場合は、-fオプションを省略することができます現在の作業ディレクトリにあります。

-Rが省略されている場合、上記の呼び出しによってインデックス付きシンボルがゼロになることに注意してください。非常に古いcscopeのバージョンは-Rをサポートしていません。たとえば、バージョン15.8aがサポートしています。

-Lのための可能な値のリストは以下のとおりです。

cscope.outファイルを作成するときに -Rオプションも使用することができ
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 

例:

cscope -bR 
15

あなたは、おそらくこのを探しています:

cscope -L1<symbol> 

あなたがファイルを変更している場合、それはそれは、データベースの更新にcscopeのために良いことだが、あなたは、同様-dを使用することができます。

-Lは、 "行単位のコマンドを実行する"という意味で、別のオプションとして記述された次の数字(この場合は1)は、特定のコマンドです。マンページは、フィールド"。 "フィールド"は対話型のcscopeプロンプトで与えられます。便宜のために数字を付け加えました。 "this"は数字の後に続くテキストを指します。パターンなので、必ずしも完全なシンボルを入力する必要はありません。

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

私のcscope.outがあるフォルダの下にあなたの行 "cscope -d -L1 "を試しました。残念ながら、それは私に何も与えませんでした。一方、同じ場所で「cbrowser」を起動すると、同じクエリを送信して、結果をUIに表示することができます。何か不足していますか?私はオプションとシンボル引数の間にスペースを入れて、または使わないでコマンドラインを試しました。 – kakyo

+0

@kakyo:私が言うことは、それが私のために働くということです。あなたは実際に '<' and '>'とタイプしていませんでしたか? cscope.outを削除してcscopeに再構築させましたか(つまり、-dフラグを使用しないで)? – rici

+0

いいえ、私はシンボル自体が<>で来ないことを知っています:)。私はちょうどcscope.outを削除してから "scope -L1 "を試しました。私の驚いたことに、cscopeはその場でファイルを生成しませんでした。代わりに、 "cscope:ソースファイルが見つかりません"というメッセージが表示されます。これは、私のコードがcscope.outに相対的なサブフォルダにあるためですか?そのコマンドでソースファイルを指定する必要はありますか? – kakyo

関連する問題