About me

Friday, 4 March 2016

cscope

  • Introduction
最近在使用ctag+tagtree,總覺得哪裡有點美中不足,
因為ctag沒有辦法列出誰有呼叫這個函數的功能,
所以後來就混著使用cscope用。

List


~~~~~~~~~~~~~~~~~以下是正文~~~~~~~~~~~~~~~~


  • 安裝scope
下載完tarball以後,解壓縮,編譯並安裝:
  • tar -zvxf cscope.tar.gz
  • cd cscope
  • ./configure 
  • make 
  • sudo make install

  • 產生cscope資料庫
在要產生資料庫的根目錄下:
  • cscope -Rbq

之後會產生3個檔案
  • cscope.in.out
  • cscope.out
  • cscope.po.out

  • 設定vimrc
因為我只會用到「尋找誰呼叫這個函數」這個功能,所以將這個功能加入快捷鍵:
打開~/.vimrc
  • vim ~/.vimrc
加入以下這一行:
  • nnoremap <C-c> :cs find c <C-R>=expand("<cword>")<CR><CR>

這樣以後只要在command mode直接按「ctrl+c」,就會直接顯示呼叫這個函數的函數了!

  • 使用cscope
假設要修改一支usb 滑鼠的driver,
  • vim drivers/hid/usbhid/usbmouse.c 
讀進資料庫
進入vim 的command mode以後,輸入:
  • :cs add ./cscope.out ./

尋找函數定義
輸入
  • :cs find g input_report_key
然後就會跳到定義去了。

多少檔案呼叫這個函數
輸入
  • :cs find c input_report_key
出現如下畫面:
可以清楚看到,哪個檔案的第幾行,哪個函數裏面去呼叫的。
找到你要找的檔案後,按「q」,然後輸入你要選擇的tag number以後,就會進入那個檔案了。


其他用法
清楚的看到,語法基本上就是:
cscope find c | d | e | f | g | i | s | t name的結合,
底下是說明:
  •  0 或 s   尋找這個C符號
  •  1 或 g   尋找這個函數定義
  •  2 或 d   尋找這個函數呼叫的函數 
  •  3 或 c   尋找誰呼叫這個函數
  •  4 或 t   尋找這個字串
  •  6 或 e   尋找這個egrep pattern 
  •  7 或 f   尋找這個文件
  •  8 或 i   尋找包含這個文件的文件

有需要的話就請自己在加入.vimrc裏面當快捷鍵。
     
  • ref

No comments:

Post a Comment