使用vim看代碼:cscope

來源:互聯網
上載者:User

原文地址:使用vim看代碼:cscope 作者:Bean_lee


    vim+cscope+ctags是Linux看代碼利器,在網上搜vim教程一搜一大堆,很多講的都不錯,可惜自己都沒學會。好早之前,我的老科長波哥曾經教過我一次,ctags我算是學會大概,cscope只能算是入門級水平,比如查看某個函數調用,還得用:cs find c function這種比較慢的方法。我自己比較懶,花在熟練掌握工具的時間太少了,這麼看來,自己還不是個好程式員。     cscope的存在讓vim有了媲美Source Insight的能力,那麼對大工程檔案如何使用cscope呢。
     最近在看PostgreSQL的源碼,我們知道,PostgreSQL源碼屬於一個大型工程,src下面好多目錄,不同目錄下好多檔案。好多教程講述建立csope資料庫的方法,都是下面的方法,以我的PostgreSQL為例)     root@manu:/usr/local/src/pgsrc/postgresql-9.2.3/src# cscope -Rbq
root@manu:/usr/local/src/pgsrc/postgresql-9.2.3/src# ll ..... -rw-r--r--  1 root root  2138112  3月 30 23:35 cscope.in.out -rw-r--r--  1 root root 19451512  3月 30 23:35 cscope.out -rw-r--r--  1 root root 14147844  3月 30 23:35 cscope.po.out .....    這種方法為帶來問題(也可能是我功底比較淺),會帶來什麼問題呢。
    講這個之前,我們先學習下cscope的應用指令:在vim命令列下執行:cs help 

    
     cs show是顯示當前可用的資料庫,cs add是添加一個資料庫。 我們看下 root@manu:/usr/local/src/pgsrc/postgresql-9.2.3/src# cd backend/storage/file/
root@manu:/usr/local/src/pgsrc/postgresql-9.2.3/src/backend/storage/file# vi fd.c


    我們執行添加cscope 測試資料庫的操作,在vim的命令列模式執行 :cs add /usr/local/src/pgsrc/postgresql-9.2.3/src/cscope.out :cs show     可以看到如下db串連:     目前還正常,當我們使用:cs find 去尋找函數調用的關係的時候:比如我讀到closeAllVfds 函數實現的時候,我關心誰調用了fd.c中的closeAllVfds這個function。:cs find c 是幹這個活的,請看上面的help。           結果是沒找到。        
   我們不是已經添加了資料庫了嗎,為啥沒找到了呢。原因就是我們產生cscope.out的時候,路徑都是相對的路徑。對於大工程我們怎麼用cscope做到檔案間的函數跳轉呢。           下面介紹官方文檔推薦的方法: Using Cscope on large projects (example: the Linux kernel),英文好的筒子可以直接去看原文,不用聽我羅嗦。
    1 建立cscope目錄,我在自己的家目錄下專門存放cscope資料庫的目錄: root@manu:~/cscope# ll 總用量 16 drwxr-xr-x  2 root root  4096  3月 31 00:49 ./ drwxr-xr-x 72 manu manu 12288  3月 31 00:48 ../     2 建立一個指令碼來做建立cscope資料庫的事情 root@manu:~/cscope# cat /usr/bin/makecscope.sh 
#!/bin/sh 

usage()
{
   echo "usage : makecscope src_path project_name"
   echo "I will create cscope db in ~/cscope/project_name"
}
if [ $# -ne 2 ]
then 
    usage
    exit
fi

SRC_PATH=$1
CSCOPE_PATH=/home/manu/cscope/$2

mkdir -p $CSCOPE_PATH
cd $CSCOPE_PATH
find $SRC_PATH -name "*.h" -o -name "*.c" -o -name "Makefile" -o -name "makefile" > cscope.files
cscope -bkq -i ./cscope.files

我們建立了一個sh指令碼來幹這個事情,sh指令碼會接受兩個參數    源碼路徑:指令碼會搜尋原始碼路徑下的所有.c .h Makefile makefile檔案    項目的名稱:指令碼會在~/cscope目錄下建立以第二個參數為名的目錄,同時將產生的cscope資料庫放入  該目錄下      我們將這個makecscope.sh指令碼放入/usr/bin/目錄下,就可以在任意路徑下執行這個指令碼了
    3 為任意項目建立cscope資料庫,我們還是以PostgreSQL為例: root@manu:~/cscope# makecscope.sh /usr/local/src/pgsrc/postgresql-9.2.3/src/ postgres

我為路徑為 /usr/local/src/pgsrc/postgresql-9.2.3/src/下的所有C檔案 標頭檔和Makefile檔案建立了cscope資料庫,並將資料庫放在了~/cscope/postgres路徑下。 root@manu:~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.