任何可以处理这种情况的好的C ++重构工具

时间:2011-01-17 13:32:25

标签: c++ refactoring

我有一个庞大的C ++代码库,其中包含一些我计划重写的错误日志记录功能,定义如下;

void LogError(ErrorLevel elvl,LPCTSTR Format,...);  // Literal version
void LogError(ErrorLevel elvl,UINT ResourceID,...); // Resource version

我打算将这些重写为单一功能

void LogError(ErrNo No,...);

在这种情况下,ErrNo将是一个枚举,用于从外部文件中查找其余的错误详细信息。虽然我正在使用并喜欢Visual Assist,但它似乎并不适合这种事情。我认为执行这个重构的最简单的方法是编写一个小程序,它使用搜索输出的结果来查找该函数的所有出现,例如:

    c:\cpp\common\Atlas\Comps\LSADJUST.cpp
        LSAFormNormalEquations (174):    LogError(elvl_Error,IDS_WINWRN0058,i+1,TravObs.setup_no,TravObs.round_no
        LSAFormNormalEquations (180):    LogError(elvl_Error,IDS_WINWRN0059,i+1,TravObs.setup_no,TravObs.round_no
        LSAFormNormalEquations (186):    LogError(elvl_Error,IDS_WINWRN0060,i+1,TravObs.setup_no,TravObs.round_no
    c:\cpp\common\Atlas\Comps\LSADJUSTZ.CPP
        LSAFormNormalEquationsZ (45):    LogError(elvl_Note,_T("Adjusting heights by least squares"));
    c:\cpp\Win32\Atlas\Section\OptmizeSectionVolumes.cpp
        OnSectionOptimizeVolumes (239):    LogError(elvl_Note,"Shifted section at chainage %0.1lf by %0.3lf",Graph.c1,Offset);

然后解析并修改源代码。还有其他工具可以为我简化这项任务吗?如果看一个related question哪个含量那么多。我不介意花一点钱购买一个相当容易使用的工具,但是没有足够的时间或预算用于此类工作。

2 个答案:

答案 0 :(得分:1)

如果您使用的是Unix,使用sed编辑所有源代码可能会处理大部分更改。您必须手动完成一些更改。我过去曾使用过这种技术。

答案 1 :(得分:0)

寻找能够满足我需求的轻量级东西,这是一个空白,而且学习SED虽然值得,但对于那些不能解决我问题的东西来说,这将是一项相当大的工作。我最终编写了自己的工具来执行代码库的单独副本所需的重构,直到我很高兴它正在完全按照我的需要进行操作。这涉及从Visual Assists获取输出查找所有引用选项,并使用它来重构代码库。我发布了代码,但是因为它代表的非常糟糕,并且可能会在不同的代码库下失败。一般问题可以更好地说明如下

  • 对于C ++代码库,找到函数fn的每个出现的参数a,b,... n
  • 从源文件中删除fn的出现
  • 将参数提取为文本变量
  • 添加一些变量,例如实例编号,源文件名等......
  • 在删除fn的位置,写一个可以包含可用变量的格式化字符串
  • 将类似的格式化字符串附加到一个或多个外部文件(例如资源文件等...)

我猜测上面的功能对于已经解析源的人来说很容易实现,并且会将这个问题的链接传递给Whole Tomato作为增强建议。

修改:对于任何有兴趣的人,都会对VA forum here进行一些跟进。