“转到定义”/“转到声明”在 VS2010 中不能可靠地工作?

Posted

技术标签:

【中文标题】“转到定义”/“转到声明”在 VS2010 中不能可靠地工作?【英文标题】:"Go to Definition"/"Go to Declaration" not working reliably in VS2010? 【发布时间】:2012-04-19 22:27:15 【问题描述】:

我最近想开始为一个开源 C++ 项目做贡献。由于对 C++ 的经验很少,我选择了 Visual Studio 作为 IDE,并使用 SP1 进行了更新。我得到了相对容易构建的解决方案,并且想稍微浏览一下代码以获得概览。

这时我注意到有时“转到定义”/“转到声明”不起作用。当我右键单击源代码中的符号时,这两个选项都可用,但是当我在头文件中时,“转到定义”只会让我再次进入那些相关函数的声明。当我在 .cc 文件中时,我总是会被带到同一个文件中的定义。

我注意到的与此相关的功能的其他一些事情是:

1) 对于某些函数,我可以从头文件导航到定义,但是另一个方向被破坏了

2) 如果将声明更改为完全匹配定义,则可以修复某些函数的导航,例如

header declaration:
    void buche(sint64 betrag, player_cost type);
source definition:
    void karte_t::buche(sint64 const betrag, player_cost const type)

改成

header declaration:
    void buche(sint64 const betrag, player_cost const type);

-> 双向导航

3) 当点击源文件中相关函数的代码块时,顶部的范围菜单变为“(全局范围)”,而不是显示右侧的小箭头(这是一个符号我认为是前向声明?)和类名(但这些函数绝对是类成员)

我搜索了很多,这似乎是一个相对知名的问题。网站上有一个帖子:How to get IntelliSense to reliably work in Visual Studio 2008

我还在 Microsoft 论坛上找到了几个主题(我无法链接,因为我只能发布两个超链接),但没有官方确认错误或其他什么。

我发现的答复的精髓是应该删除 .ncb 文件(据我了解,该文件已被 VS2010 中的 .sdf 数据库取代),或使用选项在加载解决方案时重建数据库。我都做了很多次,没有用。 *** 上该线程上评分最高的回复似乎暗示这只是一个错误(Intellisense 的 - 我是否理解正确,它是这个自动完成组件也负责代码导航?)必须接受,建议改用Visual Assist,但是当时的问题是关于VS2008,一个回复指出VS2010对此进行了改进。另一个回复归咎于递归引用,但我认为这在这个项目中不是问题,因为所有文件(当然是我检查过并遇到问题的少数文件)都包含保护。该项目的一位编码员也向我证实,他也有同样的问题。但我并不是那么热衷于在 Visual Assist 上花钱,这只是一个小爱好......

拥有丰富的 Eclipse/Java 经验,我觉得这样一个 IDE 的相对重要的特性不能可靠地工作,这让我觉得很奇怪。当然我可以理解,静态代码分析对于 C++ 来说比对于 Java 来说要困难得多。但话又说回来,Visual Studio 是一个商业产品,有很多开发周期。

所以总结这篇文章,这是一个不可避免的错误吗?

【问题讨论】:

您发布的文章:如何让智能感知在 VS 2008 中可靠工作对我有用。我关闭VS解决方案,删除解决方案的SDF文件,重新打开解决方案,重新构建解决方案,瞧。 【参考方案1】:

我猜这取决于你认为不可避免的情况。

根据我的经验,Intellisense 问题似乎主要是由模板、宏或两者引起的。

Intellisense 使用的解析器/预处理器的工作方式似乎与编译器不同,在某些情况下,它可能会丢失信息并做出错误的假设。

如果您正在编码并且突然注意到 Intellisense 已损坏,并且您刚刚添加了一个相当复杂的模板类(一个使用其他模板类的模板类,或者您使用另一个模板类进行实例化,或者任何奇怪的东西),或者一个宏(同样,尤其是复杂的宏),您通常可以假设这是导致它的原因。 通常,通过重新排列代码、稍微简化或只是随机更改它,您将能够恢复 Intellisense(通常仅在您删除 .sdf 文件之后)。

这很不方便,但如果是图书馆破坏了它,那就更糟了。尤其是一些 Boost 库,往往会经常破坏它。在这些情况下,就更难避免了。

无论如何,Intellisense 正在稳步改进。 VS2010 比 VS2008 准确和稳定得多,VS2012 似乎也比 VS2010 好(虽然我还没有使用太多)。

事实上,如果您对 VS2010 没有任何特殊依赖,您可能只想更新到 VS2012。

【讨论】:

感谢您的回复。那我试试VS2012吧。

以上是关于“转到定义”/“转到声明”在 VS2010 中不能可靠地工作?的主要内容,如果未能解决你的问题,请参考以下文章

vs2010 F12转到定义后 解决方案窗体无法跳转

VS2015快捷键

VS2015快捷键大全

vs2008的快捷键是怎么设置的

本人在KEIL4中右键无法跳转到定义

C#快捷键大全