LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: icoming

linux下有没有设计出来专门读代码的工具?

[复制链接]
发表于 2004-8-24 11:49:03 | 显示全部楼层
用vi+ctags
或emacs+etags

最初由 icoming 发表
可是如果是c程序的话,着一个变量的定义非常的麻烦.找的头都晕了
发表于 2004-8-24 18:09:42 | 显示全部楼层
利用wine来运行source insight。
超酷。
发表于 2004-8-24 19:23:16 | 显示全部楼层

  1. *if_cscop.txt*  For Vim version 6.3.  最近更新:2004年6月


  2.                   VIM REFERENCE MANUAL    by Andy Kahn
  3.                 (译者:lang2 [url]http://vimcdoc.sf.net[/url])

  4.                                                         *cscope* *Cscope*
  5. 本文档阐述如何使用 Vim 的 cscope 界面。

  6. Cscope 是一个类似 ctags 的工具。 你可以把它想作是超过频的 ctags,因为它功能比
  7. ctags 强大很多。 在 Vim 里,通过 cscope 查询结果来跳转就象跳转到其他的标签完
  8. 全一样; 它被保存在标签堆栈里。这样你就可以象使用 |tags| 一样在函数等等之间便捷
  9. 的跳转。

  10. 1. Cscope 简介                        |cscope-intro|
  11. 2. Cscope 相关命令                |cscope-commands|
  12. 3. Cscope 选项                        |cscope-options|
  13. 4. 如何在 Vim 中使用 cscope        |cscope-howtouse|
  14. 5. 缺陷                                |cscope-limitations|
  15. 6. 建议的使用方法                |cscope-suggestions|
  16. 7. cscope 的获取等等信息        |cscope-info|

  17. 到目前为止 cscope 界面仅在 Unix 及 Win32 平台下有效。
  18. {Vi does not have any of these commands}

  19. ==============================================================================
  20. 1. Cscope 简介                                                *cscope-intro*

  21. 下面的文本是摘自 cscope 的手册页:

  22.                                     -----

  23.   Cscope 是一个交互式的屏幕下使用的工具,用来帮助你:

  24.        无须在厚厚的程序清单中翻来翻去就可以认识一个 C 程序的工作原理。

  25.        无须熟悉整个程序就可以知道清楚程序 bug 所要修改的代码位置。

  26.        检查提议的改动 (如添加一个枚举值) 可能会产生的效果。

  27.        验证所有的源文件都已经作了需要的修改;例如给某一个现存的函数添加
  28.        一个参数。

  29.        在所有相关的源文件中对一个全局变量改名。

  30.        在所有相关的位置将一个常数改为一个预处理符号。

  31.   它被设计用来回答一下的问题:
  32.        什么地方用到了这个符号?
  33.        这是在什么地方定义的?
  34.        这个变量在哪里被赋值?
  35.        这个全局符号的定义在那里?
  36.        这个函数在源文件中的那个地方?
  37.        那些函数调用了这个函数?
  38.        这个函数调用了那些函数?
  39.        信息 "out of space" 从哪来?
  40.        这个源文件在整个目录结构中处于什么位置?
  41.        哪些文件包含这个头文件?

  42.   Cscope 在第一次被使用在指定的源文件时会建立一个符号的数据库。接下来被调
  43.   用时,cscope 仅仅重建那些被改动或者新文件相关的数据库。那些没有被改动的
  44.   文件相关的数据库会被直接复制使用。这是的重建数据库要比第一次运行快许多。

  45.                                     -----

  46. 当 cscope 被一般的调用时,你会得到一个全屏幕的选择窗口。你可以输入以上
  47. 问题中的一个。然而,一旦找到一个匹配你必须进入一个文本编辑器来查看和编辑
  48. 匹配的文本。你无法象在 vi 中使用 Ctrl-] 或 :tag 命令那样方便的跳转。

  49. Vim 的 cscope 界面的工作原理是:先调用 cscope 的命令行界面,然后分析其
  50. 输出结果从而找到匹配处。最终结果是:cscope 查询结果就象一般的标签一样。
  51. 你可以使用一般的标签命令 (Ctrl-] 或 :tag) 然后再用 Ctrl-T 回跳。
  52. (note 不过,其实你不能简单的就使用 Ctrl-] 或 :tag 来跳转到标签。在那之前
  53. 你必须重新定义映射或设定一些选项值。下面的几节会告诉你如何正确的使用
  54. cscope 界面)


  55. ==============================================================================
  56. 2. Cscope 相关命令                                        *cscope-commands*

  57.                 *:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560*
  58. 所有命令都是通过主命令 ":cscope" 的子项完成的。主命令最短的缩写是 ":cs"。
  59. ":scscope" 完成同样的功能的同时还可以分割窗口 (缩写: "scs").

  60. 可用的子命令有:

  61.                         *E563* *E564* *E566* *E568* *E569* *E622* *E623*
  62.                         *E625* *E626* *E609*
  63.     add   : 添加一个新的 cscope 数据库/连接。

  64.         用法        :cs add {file|dir} [pre-path] [flags]

  65.             [pre-path] 用来通知 cscope 使用 -P [pre-path] 选项。

  66.             [flags] 可以用来给 cscope 传递额外的选项。

  67.         例子 >
  68.             :cscope add /usr/local/cdb/cscope.out
  69.             :cscope add /projects/vim/cscope.out /usr/local/vim
  70.             :cscope add cscope.out /usr/local/vim -C
  71. <
  72.                                       *cscope-find* *cs-find*
  73.                                                 *E565* *E567*
  74.     find  : 查询 cscope。除了第 5 个之外的所有 cscope 查询功能都
  75.             可以使用。第 5 个是 "Change this grep pattern"。

  76.         用法        :cs find {querytype} {name}

  77.             {querytype} 和 cscope 的控制台界面以及 nvi 缺省命令
  78.             都是一致的。

  79.                 0 或 s: 查找 C 符号
  80.                 1 或 g: 查找定义
  81.                 2 或 d: 查找本函数调用的函数
  82.                 3 或 c: 查找调用指定函数的函数
  83.                 4 或 t: 查找字符串
  84.                 6 或 e: 查找 egrep 模式
  85.                 7 或 f: 查找文件
  86.                 8 或 i: 查找包含指定文件的文件

  87.         例如 >
  88.             :cscope find c vim_free
  89.             :cscope find 3 vim_free
  90. <
  91.             这两个例子执行同样的查询。 >

  92.             :cscope find 0 DEFAULT_TERM
  93. <
  94.             在 Vim 5.1 的源代码内执行以上的命令得到一下的结果:

  95.             Cscope tag: DEFAULT_TERM
  96.                #   line  filename / context / line
  97.                1   1009  vim-5.1-gtk/src/term.c <<GLOBAL>>
  98.                          #define DEFAULT_TERM (char_u *)"amiga"
  99.                2   1013  vim-5.1-gtk/src/term.c <<GLOBAL>>
  100.                          #define DEFAULT_TERM (char_u *)"win32"
  101.                3   1017  vim-5.1-gtk/src/term.c <<GLOBAL>>
  102.                          #define DEFAULT_TERM (char_u *)"pcterm"
  103.                4   1021  vim-5.1-gtk/src/term.c <<GLOBAL>>
  104.                          #define DEFAULT_TERM (char_u *)"ansi"
  105.                5   1025  vim-5.1-gtk/src/term.c <<GLOBAL>>
  106.                          #define DEFAULT_TERM (char_u *)"vt52"
  107.                6   1029  vim-5.1-gtk/src/term.c <<GLOBAL>>
  108.                          #define DEFAULT_TERM (char_u *)"os2ansi"
  109.                7   1033  vim-5.1-gtk/src/term.c <<GLOBAL>>
  110.                          #define DEFAULT_TERM (char_u *)"ansi"
  111.                8   1037  vim-5.1-gtk/src/term.c <<GLOBAL>>
  112.                          # undef DEFAULT_TERM
  113.                9   1038  vim-5.1-gtk/src/term.c <<GLOBAL>>
  114.                          #define DEFAULT_TERM (char_u *)"beos-ansi"
  115.               10   1042  vim-5.1-gtk/src/term.c <<GLOBAL>>
  116.                          #define DEFAULT_TERM (char_u *)"mac-ansi"
  117.               11   1335  vim-5.1-gtk/src/term.c <<set_termname>>
  118.                          term = DEFAULT_TERM;
  119.               12   1459  vim-5.1-gtk/src/term.c <<set_termname>>
  120.                          if (STRCMP(term, DEFAULT_TERM))
  121.               13   1826  vim-5.1-gtk/src/term.c <<termcapinit>>
  122.                          term = DEFAULT_TERM;
  123.               14   1833  vim-5.1-gtk/src/term.c <<termcapinit>>
  124.                          term = DEFAULT_TERM;
  125.               15   3635  vim-5.1-gtk/src/term.c <<update_tcap>>
  126.                          p = find_builtin_term(DEFAULT_TERM);
  127.             Enter nr of choice (<CR> to abort):

  128.             这样的输出显示了几类信息:
  129.             1. 标签号码 (例子中有 15 个).
  130.             2. 标签所在的行号.
  131.             3. 标签所在文件的文件名.
  132.             4. 标签的上下文 (如:全局或函数名).
  133.             5. 标签所在行的文本.

  134.     help  : 显示一个简单的帮助。

  135.             用法    :cs help

  136.                                                 *E260* *E261*
  137.     kill  : 终止一个 cscope 连接 (或终止所有 cscope 连接).

  138.             用法   :cs kill {num|partial_name}

  139.             要终止一个连接,需要给处连接号或者部分的连接名称。部分名称可以
  140.             是数据库文件路径的任何一部分。所以要当心使用这个功能!

  141.             如果给定的连接号是 -1,那么 所 有 的 cscope 连接都会被终止。

  142.     reset : 重新初始化所有连接。

  143.             用法    :cs reset

  144.     show  : 显示当前的连接。

  145.             用法    :cs show

  146.                                                         *:cstag* *E257* *E562*
  147. 如果你同时使用 cscope 和 ctags, |:cstag| 允许你在跳转前对两者都在查询。
  148. 例如,你可以选择先查询 cscope 数据库,如果无法找到匹配,再查询标签文件。
  149. 这种做法的次序可以通过 |csto| 的值来调整。参见 |cscope-options|。

  150. |:cstag| 在搜索 cscope 数据库时执行和 ":cs find g" 一样的操作。

  151. |:cstag| 在搜索标签文件时执行和 |:tjump| 一样的操作。


  152. ==============================================================================
  153. 3. Cscope 选项                                                *cscope-options*

  154. 所有 cscope 有关的选项都可以用 |:set| 命令来设定。比较理想的做法是将这些
  155. 设定添加到你的启动文件中 (如:.vimrc)。某些 cscope 选项仅仅在 |.vimrc|
  156. 文件内才有效。在 vim 启动之后再设定它们的值没有任何效果!

  157.                                                         *cscopeprg* *csprg*
  158. 'cscopeprg' 指定用来执行 cscope 的命令。缺省值是 "cscope"。例如: >
  159.         :set csprg=/usr/local/bin/cscope
  160. <
  161.                                             *cscopequickfix* *csqf* *E469*
  162. {not available when compiled without the |+quickfix| feature}
  163. 'cscopequickfix' 设定是否使用 quickfix 窗口来显示 cscope 结果。这是一组用
  164. 逗号分割的值。每个值可以代表一个 |cscope-find| 命令 (s, g, d, c, t, e, f
  165. 或 i) 加一个标志 (+, - 或 0)。
  166. '+' 表示结果必须被添加到 quickfix 窗口中。 '-' 表示清除上次的结果,'0' 或
  167. 不存在表示不使用 quickfix。 搜索从字符串首开始直到命令第一次出现时结束。
  168. 缺省值是 "" (不使用 quickfix 窗口)。下面的值也许有用: "s-,c-,d-,i-,t-,e-"。

  169.                                                         *cscopetag* *cst*
  170. 若设定了 'cscopetag' 选项,":tag" 命令,CTRL-] 以及 "vim -t" 都会使用
  171. |:cstag| 而不是缺省的 :tag。也就是说,设定 'cst' 选项意味着你总同时搜索 cscope
  172. 数据库和标签文件。缺省值为关。例如: >
  173.         :set cst
  174.         :set nocst
  175. <
  176.                                                         *cscopetagorder* *csto*
  177. 'csto' 的值决定 |:cstag| 命令查找的次序。如果 'csto' 被设为 0,cscope 数据库
  178. 先被搜索,搜索失败的情况下在搜索标记文件。如果 'csto' 被设为 1,标记文件会在
  179. cscope 数据库之前被搜索。缺省值为 0。
  180. 例: >
  181.         :set csto=0
  182.         :set csto=1
  183. <
  184.                                                 *cscopeverbose* *csverb*
  185. 如果 'cscopeverbose' 没有被设定 (缺省情况),当添加一个数据库时,成功与否不会
  186. 被显示。理想的情况是,你先在你的 |.vimrc| 文件中复位该选项,再添加 cscope
  187. 数据库,然后再设定之。这样,如果你在使用 vim 当中动态添加数据库,你就会被 vim
  188. 告知结果。例如: >
  189.         :set csverb
  190.         :set nocsverb
  191. <
  192.                                                       *cscopepathcomp* *cspc*
  193. 'cspc' 的值决定显示文件路径的多少部分。在缺省值 0 的情况下整个路径都会被显
  194. 示。1 只显示文件名,而不显示路径名。其它值会显示该值表示数目的部分。例如: >
  195.         :set cspc=3
  196. 会显示文件路径的最后 3 个部分,包括文件名本身。

  197. ==============================================================================
  198. 4. 如何在 Vim 中使用 cscope                                *cscope-howtouse*

  199. 首先你要作的是为你的源文件建立一个 cscope 数据库。最简单的做法是使用
  200. "cscope -b" 命令。更详细的说明请查阅 cscope 的手册页。

  201. 假定你已经建立了一个 cscope 数据库,你需要将其添加 "add" 到 Vim 中来。这会
  202. 建立一个 cscope "连接" 给 Vim 来使用。你可以把这些加入到你的 .vimrc 文件里。
  203. 也可以在 vim 启动之后手动完成。例如,要添加一个 cscope 数据库 "cscope.out",
  204. 你可以这样做: >

  205.         :cs add cscope.out
  206. <

  207. 你可以用 ":cs show" 命令来检查一下结果。该命令会产生类似下面的结果: >

  208. # pid          database name                              prepend path
  209. 0 28806  cscope.out                              <none>
  210. <
  211. Note:
  212. 因为 Microsoft RTL 的缺陷,Win32 版本只能显示 0 而不是真正的进程 ID。

  213. 一旦建立了 cscope 连接,你就可以做各种查询并得到结果。查询所用的命令是
  214. ":cs find"。例如: >

  215.         :cs find g ALIGN_SIZE
  216. <
  217. 这样要做很多的打字工作,所以有些麻烦。幸运的是,我们可以通过定义快捷键
  218. 来避免过多的输入。参考 |cscope-suggestions| 可以得到一些使用的建议。

  219. 如果匹配结果只有一个,你会被自动带到该处。如果匹配结果多于一个,Vim 会显示一个
  220. 选择屏幕让你来选择一处匹配。在你跳转到新的位置后,简单的用 Ctrl-T 就可以跳会
  221. 远处。


  222. ==============================================================================
  223. 5. 缺陷                                                        *cscope-limitations*

  224. Vim 对 cscope 的支持紧当所在系统支持一下四个系统调用时才可用:fork(),
  225. pipe(), execl(), waitpid()。这意味着它基本上仅限于 Unix 系统。

  226. 另外 cscope 支持在 Win32 也可以使用。更多的信息以及一个 Win32 版本的
  227. cscope 可以在这里找到:

  228.         [url]http://iamphet.nm.ru/cscope/index.html[/url]

  229. 同时还有几个硬性的限制:

  230.     1. cscope 的最大连接数目是 8。你还需要更多吗?

  231.     2. 在用 |:cstag| 搜索时要执行 |:tjump|,这一点是无法配置的。
  232.     (如:你不能选择使用 tselect)。

  233. ==============================================================================
  234. 6. 建议的使用方法                                        *cscope-suggestions*

  235. 将下面的设定加入到你的 .vimrc 里 (根据你的情况调整文件路径): >

  236.         if has("cscope")
  237.                 set csprg=/usr/local/bin/cscope
  238.                 set csto=0
  239.                 set cst
  240.                 set nocsverb
  241.                 " add any database in current directory
  242.                 if filereadable("cscope.out")
  243.                     cs add cscope.out
  244.                 " else add database pointed to by environment
  245.                 elseif $CSCOPE_DB != ""
  246.                     cs add $CSCOPE_DB
  247.                 endif
  248.                 set csverb
  249.         endif

  250. 我们设定了 'cscopetag',这样所有的 :tag 命令就会实际上调用 :cstag。这包括
  251. :tag, Ctrl-], 及 "vim -t"。结果是一般的 tag 命令不仅搜索由 ctags 产生的
  252. 标签文件,同时也搜索 cscope 数据库。

  253. 有些用户也许向保留原来的标签命令,而用另外一个快捷键来执行 :cstag 命令。
  254. 例如,你可以用下面的命令将 Ctrl-_  (下划线) 映射到 :cstag: >

  255.         map <C-_> :cstag <C-R>=expand("<cword>")<CR><CR>

  256. 常用的 cscope 查询 (用 ":cs find") 包括寻找所有调用指定函数的函数以及寻找
  257. 所有出现某个指定的 C 符号的地方。你可以参照一下的映射: >

  258.         map g<C-]> :cs find 3 <C-R>=expand("<cword>")<CR><CR>
  259.         map g<C-\> :cs find 0 <C-R>=expand("<cword>")<CR><CR>

  260. 这些对 Ctrl-] (右方括号) 和 Ctrl-\ (反斜杠) 的映射使你可以将光标移动到你想
  261. 作查询的函数或 C 符号的上方然后快速的查询 cscope 数据库。

  262. 你也可以使用下面的方式。这些映射借鉴了 Cscope 主页
  263. ([url]http://cscope.sourceforge.net/[/url]) 上的 Vim/Cscope 教程: >

  264.         nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
  265.         nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
  266.         nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
  267.         nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
  268.         nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
  269.         nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
  270.         nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
  271.         nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>

  272.         " Using 'CTRL-spacebar' then a search type makes the vim window
  273.         " split horizontally, with search result displayed in
  274.         " the new window.

  275.         nmap <C-Space>s :scs find s <C-R>=expand("<cword>")<CR><CR>
  276.         nmap <C-Space>g :scs find g <C-R>=expand("<cword>")<CR><CR>
  277.         nmap <C-Space>c :scs find c <C-R>=expand("<cword>")<CR><CR>
  278.         nmap <C-Space>t :scs find t <C-R>=expand("<cword>")<CR><CR>
  279.         nmap <C-Space>e :scs find e <C-R>=expand("<cword>")<CR><CR>
  280.         nmap <C-Space>f :scs find f <C-R>=expand("<cfile>")<CR><CR>
  281.         nmap <C-Space>i :scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
  282.         nmap <C-Space>d :scs find d <C-R>=expand("<cword>")<CR><CR>

  283.         " Hitting CTRL-space *twice* before the search type does a vertical
  284.         " split instead of a horizontal one

  285.         nmap <C-Space><C-Space>s
  286.                 \:vert scs find s <C-R>=expand("<cword>")<CR><CR>
  287.         nmap <C-Space><C-Space>g
  288.                 \:vert scs find g <C-R>=expand("<cword>")<CR><CR>
  289.         nmap <C-Space><C-Space>c
  290.                 \:vert scs find c <C-R>=expand("<cword>")<CR><CR>
  291.         nmap <C-Space><C-Space>t
  292.                 \:vert scs find t <C-R>=expand("<cword>")<CR><CR>
  293.         nmap <C-Space><C-Space>e
  294.                 \:vert scs find e <C-R>=expand("<cword>")<CR><CR>
  295.         nmap <C-Space><C-Space>i
  296.                 \:vert scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
  297.         nmap <C-Space><C-Space>d
  298.                 \:vert scs find d <C-R>=expand("<cword>")<CR><CR>

  299. ==============================================================================
  300. 7. Cscope 的获取等等信息                                *cscope-info*

  301. 如果你还没有 cscope (你的编译器或 OS 没有包括 cscope),你可以从下面的地址免费
  302. 下载:
  303.         [url]http://cscope.sourceforge.net/[/url]
  304. 这是被 SCO 以 BSD 许可发布的。

  305. 如果你想要更新的版本,你可以购买它。根据 (旧的) nvi 文档:

  306.         你可以用 $400 从 AT&T Software Solutions 购买无限制的许可的源码。
  307.         致电 +1-800-462-8146。

  308. 你还可以从 World-Wide Exptools Open Sourcean 的网页下载 cscope 13.x 及
  309. mlcscope 14.x (多语言 cscope,支持 C, C++, Java, lex, yacc, breakpoint
  310. listing, Ingres, 及 SDL)。网址如下:
  311.         [url]http://www.bell-labs.com/project/wwexptools/packages.html[/url]

  312. 在 Solaris 2.x 上, 如果你有 C 编译器的许可,你也就有 cscope。两者通常位于
  313. /opt/SUNWspro/bin

  314. SGI 开发者也可以得到 cscope。在以下的地址搜索 cscope:
  315.         [url]http://freeware.sgi.com/index-by-alpha.html[/url]
  316.         [url]https://toolbox.sgi.com/toolbox/utilities/cscope/[/url]
  317. 第二个地址仅对那些 SGI toolbox 的拥有者有效。

  318. 网上还有一个旧版本的 cscope 的克隆 (叫 "cs") 。出于各种原因,Vim 不支持该
  319. 程序。

  320. Vim cscope 界面/支持的原作者是 Andy Kahn <ackahn@netapp.com>。期间使用了
  321. nvi cscope 界面的构架和很少的一部分代码。如果你在使用 Vim cscope 界面时
  322. 有任何问题,建议,patches, 等等,请与他联系。
  323.                                                         *cscope-win32*
  324. 这里可以找到一个 Win32 版本的 cscope://iamphet.nm.ru/cscope/index.html

  325. Win32 支持是 Sergey Khorev <khorev@softlab.ru> 加入的。如果你有 Win32 相
  326. 关的问题,请联系他。
复制代码
 楼主| 发表于 2004-8-25 00:51:59 | 显示全部楼层
Source navigator很不错啊.
谢谢各位了!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表