emacs – CEDET可扩展性提示
我使用CEDET(最新的CVS)与几个中等大型项目(每个几百kLOC,大多数C,但有些C),有时会经历长时间的停顿,系统在几秒钟内完全无响应。更罕见的是,它完全失去控制,我必须在C-g上进行混合,并尝试移动光标或切换到不同的缓冲区以获得控制权。
我使用GNU Global为我所使用的项目创建标签,但这仍然有时很慢,特别是对于语义symref符号,以及一些似乎需要解析大量头文件和源文件的跳转。在某些情况下,语义ia-fast-jump错误与消息语义ia – fast-jump-helper:Tag SomeFunction没有缓冲区信息,即使gtags-find-tag立即找到它(在同一个项目中),尽管也许在过时的位置;这可能是一个临时的bug,通常语义ia-fast-jump是可靠的。 我会感谢任何关于如何的建议 油门CEDET不会失去所有的语义分析。 在文章http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html中有一些提示,我正在寻找超出那篇文章的任何东西。 解决方法
您正在使用的CEDET工具受到Emacs跟踪整个项目中每个符号的能力的限制。通过semanticdb-find-default-throttle节省CEDET / Semantic所做的一个好的起点。如果您知道项目的组织方式,您可以禁用某些类型的搜索来加快速度。
CEDET将解析它认为可能需要的大量文件,这也将填满内存。在这种情况下,您可以自定义semantic-idle-scheduler-max-buffer-size来禁用解析大文件,语义空闲工作解析邻近文件标志来禁用解析随机附近的内容,以及“语义空闲工作-update-headers-flag’来禁用解析头。请注意,最后2个默认值为nil,但由某些自动设置功能启用。 CEDET / Semantic将缓存内存中的大量数据,并建立排序搜索表以提高性能。如果您发现编辑头文件很多,这些编辑会导致缓存过期,并迫使它们重建。如果您退出并重新启动Emacs,那么强制语义重新载入大型数据库表。 另一种可能性是设置semanticdb-persistent-path来仅列出您关心的目录。这将减少保存的数据,这将不会重新加载。如果需要,它将根据需要重新分摊,但这将有助于保持总数据的下降。 您还可以使用语义 – before-fetch-tags-hook到在各种条件下返回nil的函数。查找由于大小,网络延迟等原因需要很长时间来解析的文件,并将其设置为从不解析。这也将节省一些时间。 使用GNU Global是加快速度的好办法。将其与语义symref一起使用将导致其找到的文件进行解析以提供输出显示的必需数据。没有太多的事情要做 对于上面发现的错误,如果您可以确定一种重现方式,请在cedet-devel邮件列表中分享,以便修复。通常当GNU Global标签无法转换为缓冲区标签时,该类型的错误已经显示出来。 为了将CEDET转移到控制之外,使用语义调试空闲功能和语义调试 – 空闲工作功能来缩小范围。看到上面有一些配置。 您可以使用cedet-gnu-global-create / update-database更新数据库,或将其添加到挂接。我不认为这是文件。 项目管理很棘手。大多数内置项目对小东西都很好。特别是具有定制构建系统的大型项目通常需要自定义EDE项目类型。创建新项目并不算太糟糕。如果您看到ede-linux或ede-emacs,您可以抓住基础知识。在您的自定义项目中,您可以包装所有相关项目,并覆盖宏,包括目录和编译命令等功能。我也为自己的工作写了一个自定义项目。这是非常相似的ede-linux与我的工作独特的东西。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |