Eclipse冻结了长文件

时间:2017-01-25 10:41:01

标签: c++ eclipse eclipse-cdt

我在linux上使用Eclipse CDT。我有一个带有5k行代码的长头文件。当我尝试通过按 F3 打开此文件中某些变量的声明时,Eclipse会冻结约20秒然后打开声明。此问题使代码导航在长文件中不可用。在较短的文件中,声明几乎立即打开。

我尝试重新启动Eclipse并重建索引,但这没有帮助 我的Eclipse版本是:

Version: Neon.1 (4.6.1)
Build id: Z20161111-1340

如何解决此问题?

2 个答案:

答案 0 :(得分:0)

由于CDT的架构方式,对较大文件的操作将比较小文件上的操作慢。

CDT从两个地方获取有关Open Declaration等操作代码的语义信息:

  • 对于当前打开的文件:来自 AST (抽象语法树),它为该文件构建。
  • 对于项目中包含的头文件和其他文件:来自索引,这是一个可搜索的项目语义信息数据库。

最初通过为项目中的每个文件创建AST并将信息存储到数据库中来构建索引。这是一个耗时的过程,但它只需要完成一次(然后每次保存文件时都会逐步更新),一旦构建完成,查询索引就很快(查询)是关于 O(log n)的索引大小。)

另一方面,由于AST代表(可能)当前正在编辑的代码,因此当您键入"时,它会不断被重建"。由于构建AST在文件长度上至少 O(n)(可能更糟;我没有仔细分析),依赖于AST的操作会变慢您正在编辑的文件的长度会增加。

现在,对于解决方法:

  1. Preferences | C/C++ | Editor | Scalability中启用某些可伸缩性设置可能会有所帮助,方法是限制需要为大文件构建AST的操作类型(请注意,您可以定义阈值为"大")。我不清楚它是否会使公开宣言更快;试一试,看看。

  2. 但是,最好的办法是将标题分解为较小的标题。这具有减少编译时间的额外优势(因为并非所有翻译单元都可能需要包括标题的所有部分),并且更好地组织您的代码(最后一个是品味问题;随意不同意)。

答案 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静态分析框架。