GNU/Linux >> Linux の 問題 >  >> Linux

vi/vimのCコードで関数の呼び出し元と呼び出し先を見つける方法は?

cscope の最小限の例

Ingo が言及しました。例を次に示します。

まず、 .vimrc に設定する必要があります :

set cscopequickfix=s-,c-,d-,i-,t-,e-

次に、プロジェクトのベース ディレクトリに移動して実行します。

cscope -Rb

これは cscope.out を生成します 解析された情報を含むファイル。 Linux カーネルのような大規模なプロジェクトであっても、生成はかなり高速です。

vim を開いて実行:

:cs add cscope.out
:cs find c my_func

c callers のニーモニックです .他の cscope クエリも可能であれば、ニーモニックは以下にリストされています:

help cscope

これにより、発信者のリストがクイックフィックス リストに追加されます。このリストは次の方法で開くことができます。

:copen

興味のある行に移動し、Enter キーを押してそこにジャンプします。

現在カーソルの下にある関数名の呼び出し元を見つけるには、 .vimrc に追加します :

function! Csc()
  cscope find c <cword>
  copen
endfunction
command! Csc call Csc()

:Csc<enter> と入力します カーソルが関数の上にあるとき。

TODO:

  • カーソル下の現在の関数に対して、1 つのコマンドで実行します。関連:ステータス行に関数名を表示
  • ファイルを入力すると、最も近いデータベース (親ディレクトリ) が自動的に追加されます:vim で cscope.out を自動ロードする方法
  • Eclipse のようにコール グラフをインタラクティブに開きます。関連:cscope データベースからコール ツリーを生成する

アドバイス:私は vim が大好きですが、この種のものをセットアップするには複雑すぎます。また、クラスなどは考慮されません。 C++で。プロジェクトがあなたにとって十分に重要である場合は、プロジェクトを何らかの「IDE」で動作させるようにしてください。プロジェクトが IDE 構成ファイル (リポジトリを汚染する自動変更ブロブ) を追跡しない場合、オーバーヘッドが発生する可能性がありますが、私にとってはそれだけの価値があります。 C / C++ の場合、これまでのところ私のお気に入りは KDevelop 4 です。


そのために、Vim は cscope と統合します 道具; :help cscope を参照 詳細については、


Linux
  1. C++ で C 関数を呼び出す方法、C で C++ 関数を呼び出す方法 (C と C++ の混合)

  2. 特定のサイズを超えるファイルをすべて取得して削除する方法

  3. 最大スタック サイズを確認するにはどうすればよいですか?

  1. vi / vimで行番号を表示するにはどうすればよいですか?

  2. Linux で「find」の結果を mv にパイプする方法

  3. カーネルモジュールコードにポーリング機能を追加するには?

  1. Linuxのviでfindによって返されたすべてのファイルを編集するにはどうすればよいですか?

  2. vimでjキーとkキーを切り替えるにはどうすればよいですか?

  3. デフォルトのファイルマネージャを見つける方法は?