我在linux上使用Eclipse CDT。我有一个带有5k行代码的长头文件。当我尝试通过按 F3 打开此文件中某些变量的声明时,Eclipse会冻结约20秒然后打开声明。此问题使代码导航在长文件中不可用。在较短的文件中,声明几乎立即打开。
我尝试重新启动Eclipse并重建索引,但这没有帮助 我的Eclipse版本是:
Version: Neon.1 (4.6.1)
Build id: Z20161111-1340
如何解决此问题?
答案 0 :(得分:0)
由于CDT的架构方式,对较大文件的操作将比较小文件上的操作慢。
CDT从两个地方获取有关Open Declaration等操作代码的语义信息:
最初通过为项目中的每个文件创建AST并将信息存储到数据库中来构建索引。这是一个耗时的过程,但它只需要完成一次(然后每次保存文件时都会逐步更新),一旦构建完成,查询索引就很快(查询)是关于 O(log n)的索引大小。)
另一方面,由于AST代表(可能)当前正在编辑的代码,因此当您键入"时,它会不断被重建"。由于构建AST在文件长度上至少 O(n)(可能更糟;我没有仔细分析),依赖于AST的操作会变慢您正在编辑的文件的长度会增加。
现在,对于解决方法:
在Preferences | C/C++ | Editor | Scalability
中启用某些可伸缩性设置可能会有所帮助,方法是限制需要为大文件构建AST的操作类型(请注意,您可以定义阈值为"大")。我不清楚它是否会使公开宣言更快;试一试,看看。
但是,最好的办法是将标题分解为较小的标题。这具有减少编译时间的额外优势(因为并非所有翻译单元都可能需要包括标题的所有部分),并且更好地组织您的代码(最后一个是品味问题;随意不同意)。
答案 1 :(得分:0)
看起来这是Eclipse bug 455467。
冻结的原因是打开申报时的高CPU使用率 我从Comment 5应用了解决方法并冻结了1-5秒:
更改所有设置 .metadata / .plugins / org.eclipse.core.runtime / .settings / org.eclipse.cdt.codan.core.prefs 从RUN_AS_YOU_TYPE \ => true到RUN_AS_YOU_TYPE \ => false似乎有帮助 我们不是这个,但这不是我们想要的。
据我所知,这种解决方法部分禁用了Codan-CDT静态分析框架。