尝试失败获取cscope / ctags以在混合的C / C ++项目中定位C ++函数

问题描述

在VIM中,我同时使用了cscope和exebrantant-ctags在纯C项目上都取得了很好的效果。但是,我现在进入了一个包含大量旧代码的大型C / C ++ / Java混合项目,并且我正在尝试使用cscope来深入了解代码流。我无法让cscope识别驻留在C ++文件中的某些功能

例如,在这个特定的项目中,有一个名为“ verifySignature”的C函数被定义为全局函数。还有另一个函数也称为“ verifySignature”,它被定义为.cpp文件中的静态函数

  1. 当我在VIM中使用时,或者当我使用独立的cscope查找定义时,即使VIM在编辑文件时,也总是将我带到C函数。静态C ++函数定义为(这在我意识到有两个'verifySignature'函数并且我看错了一个函数之前引起了极大的困惑)

  2. 当我使用cscope查找调用'verifySignature'的函数时,它仅列出C函数调用。就像cscope不知道C ++函数一样。

  3. 但是,当我使用或使用独立cscope查找符号时,它将列出这两个函数以及调用函数的每个位置。

因此-确实-了解C ++函数,但它并不总是显示出来。

作为另一个数据点,我将C ++函数重命名为“ verifySignature2”,以便其名称在整个代码库中都是唯一的,而其他所有内容均保持不变(仍然是静态的,等等),重建了我的cscope / ctags数据库并再次搜索。这次,VIM中的和“查找全局定义”可以轻松找到C ++例程。

基于此,我几乎倾向于说,如果存在具有相同名称的全局符号,则cscope会忽略静态符号。除了我从纯C项目中得到的轶事证据,事实并非如此。所以我挠头...

我正在使用以下命令生成交叉引用文件

> find . -regextype posix-extended -regex '.*\.(c|C|cpp|h|hpp|s|S|java)' > cscope.files
> usr/bin/cscope -b -q -f cscope.out
> /usr/bin/ctags --c++-kinds=+p --fields=+iaS --extra=+q -L cscope.files

我做错什么了吗?

解决方法

YouCompleteMe除了使用GoTo*命令导航并在弹出菜单中显示类型/功能/任何签名之外,还可以帮助您编写代码。您可能还想看看tagbar