当前位置:  开发笔记 > 编程语言 > 正文

是否有一个可用的C++重构工具?

如何解决《是否有一个可用的C++重构工具?》经验,为你挑选了7个好方法。

有没有人知道一个功能齐全的C++重构工具,可以在大型代码库(大约100.000行)下可靠地工作?

在过去的几年里,我一次又一次地尝试了我能找到的东西:SlickEdit,Eclipse CDT.它们都没有用.

摘要:我花时间评估"Visual Assist X"以及"Refactor for C++".两者都有一些令人印象深刻的功能,但两者都远非完美.如果不进行手动修改,通常无法提取大量代码 - 因此无法获得回报.

"Visual Assist X"具有很好的功能,例如更完整的自动复合等.但它会导致如此多的闪烁并在某些点上减慢很多.

因此我认为答案是:"不,没有适合C++的生产就绪重构工具"

更新2015年3月 至于今天的hdoghmens回复,我尝试了Resharper for C++.他的链接 https://www.jetbrains.com/resharper/对C++没有任何说明.但我发现一年多前在这里公布的Resharper C++:

https://www.jetbrains.com/resharper/features/cpp.html

我用VC2010试用了一个20MB的代码库.

测试1:提​​取方法:导致Resharper异常.没有源代码更改.

测试2:使用不同来源的提取方法:正常工作

测试3:更改提取函数的签名:破解C++代码的结果:

bool myclass::do_work123(int& Filled*&, long, int&)

也许这就是为什么C++没有列在主页上.

我认为这个问题的答案仍然是"不".



1> Tom Leys..:

Visual Assist和Visual Studio使得处理大型代码库变得更加容易.视觉辅助能够很好地追踪类或成员的使用方式,并且在重新命名时更有效,而不会出现误报而不是搜索和替换.



2> Gant..:

我发现使用Visual Studio的Visual Assist X非常有用.另一个选择是Refactor for C++.


不幸的是,Refactor for C++在使用大型代码库时效果不佳(如果有的话).
即使对于小型代码库,C++的重构也不能很好地工作,它完全被打破并且无法使用.
@Nils:你能提供一个不明白的具体例子吗?
@IraBaxter它只是破碎了.重构选项要么不显示,要么不完成.有奇怪的错误信息或根本没有.

3> HC4 - reinst..:

我希望clang将在未来几年内显着改变C++重构工具的格局.它是一个开源的模块化编译器,它公开了一个用于解析和语义分析C++代码的API.IDE和其他工具将能够使用此API而不是编写自己的解析器和语义分析器的困难工作.

谷歌已经使用clang制作了一个大规模的重构工具.


但是,有一些结果是谷歌以外的凡人可以使用吗?

4> Cristian Ada..:

Mozilla有自己的重构工具Pork(Wiki,Developer Wiki).这是Pork背后的开发者博客.据我所知,Pork成功用于Mozilla的重构.

如果你来自*nix土地,猪肉应该会有所帮助,因为Visual Studio我也推荐使用Visual Assist.



5> Ira Baxter..:

我们的DMS软件再造工具包是一个转换引擎,旨在对大量代码(包括C++)进行复杂的转换.它已被用于对数百万行代码的系统进行可靠的更改.它通过使用编译器精确的语言分析器和变换器来运行.

它有一个完整的C++解析器,具有名称和类型解析,构建代码的AST,可以应用程序或源到源的转换(使用C++表面语法)来修改这些树,并重新生成可保留注释的可编译输出.(编辑:2011年7月1日:现在C++ 1X在我们理解标准的程度上:)

它已被用于大规模的再造项目,包括C++组件重新架构,以及语言之间的100%全自动翻译.你可以在网站上看到这个.

DMS还用于构建任意源分析工具.示例包括克隆检测,测试覆盖率,智能差异(源代码结构和抽象编辑操作的比较,而不是简单插入和删除的行)等.

它(目前)不是一个交互式重构工具.我们相信,要做好大多数重构,您需要深入控制和数据流分析.DMS具有通用机制来支持这一点,此时该机制是针对C,COBOL和Java实现的,其中C++是下一个.这是一项艰巨的工作.在这种问题得到很好解决之前,你不会从任何人那里看到很多严肃的C++重构工具.首先,您需要一个完整的C++解析器: - }

编辑2011年7月5日: 看起来我们将在交互式版本上运行.我们赢得了能源部第一阶段SBIR,以调查如何做到这一点. 请参阅http://science.energy.gov/sbir/awards-and-general-stats/fy-2011/phase-i-by-state/?p=1#tx(在"Texas"下查找语义设计).不要指望结果匆忙; 这只是获得工具的3阶段多年计划的开始.

编辑8/11/2011:第一个进展......我们现在处理所有C++ 0x和OpenMP指令.

编辑1/4/2012:对C++代码进行完全控制流分析.

编辑2014年9月15日:现在已经掌握了C++ 14前端解析器/转换引擎.在这一点上甚至可以非常可靠地重命名: - }


...... DMS的目的是实现代码转换的编码和无差错应用,无论是"重构"还是"不是".是的,它很难,我们还没有.我们比我在C++中看到的任何其他工具更接近IMNSHO,并且我们的工具基础没有任何问题.剩下的是预处理器,代码规模以及为了允许这种转换而对C++语义进行编码的努力所带来的令人讨厌的问题.我会第一个说这是一个大项目.

6> bmeric..:

如果您使用的是emacs,请尝试使用Xrefactory.它支持方法提取,类/函数/变量的重命名以及插入/删除/移动参数.它还具有非常好/快速的代码完成引擎.



7> quamrana..:

目前我不推荐任何用于C++的重构工具,当然不适用于100k及以上的大型代码库.我一直希望这会像OP那样改变,我希望有一天能有所作为.我担心在我们看到任何非常好的工具之前,语言本身可能必须发生重大变化.

顺便说一下,SlickEdit是否放弃了它的重构功能?


最近阅读了Slickedit的功能,它似乎确定了与启发式方法使用名称相对应的定义.它不执行"正确的"C++名称查找.这意味着你不能相信它的转换是正确的.如果你不介意检查它的工作,这可能对你没问题.在非常大的软件包上,这可能并不好.我的看法.
推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有