Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
任何好的C++;可以处理此场景的重构工具 我有一个大的C++代码库,它包含了我计划重写的错误日志的几个函数,定义如下:p> void LogError(ErrorLevel elvl,LPCTSTR Format,...); // Literal version void LogError(ErrorLevel elvl,UINT ResourceID,...); // Resource version_C++_Refactoring - Fatal编程技术网

任何好的C++;可以处理此场景的重构工具 我有一个大的C++代码库,它包含了我计划重写的错误日志的几个函数,定义如下:p> void LogError(ErrorLevel elvl,LPCTSTR Format,...); // Literal version void LogError(ErrorLevel elvl,UINT ResourceID,...); // Resource version

任何好的C++;可以处理此场景的重构工具 我有一个大的C++代码库,它包含了我计划重写的错误日志的几个函数,定义如下:p> void LogError(ErrorLevel elvl,LPCTSTR Format,...); // Literal version void LogError(ErrorLevel elvl,UINT ResourceID,...); // Resource version,c++,refactoring,C++,Refactoring,我打算把它们作为一个函数重写 void LogError(ErrNo No,...); 在本例中,ErrNo是一个枚举,用于从外部文件中查找其余错误详细信息。虽然我正在使用和喜爱视觉辅助,但它似乎不能满足这种需求。我认为执行重构最简单的方法是编写一个小程序,使用搜索输出的结果来查找此函数的所有出现的情况,例如 c:\cpp\common\Atlas\Comps\LSADJUST.cpp LSAFormNormalEquations (174): LogError(

我打算把它们作为一个函数重写

void LogError(ErrNo No,...);
在本例中,ErrNo是一个枚举,用于从外部文件中查找其余错误详细信息。虽然我正在使用和喜爱视觉辅助,但它似乎不能满足这种需求。我认为执行重构最简单的方法是编写一个小程序,使用搜索输出的结果来查找此函数的所有出现的情况,例如

    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);

然后解析并修改源代码。有没有其他工具可以为我简化这项任务?如果看一眼,你会发现外面没有多少东西。我不介意花一小笔钱买一个相当容易使用的工具,但我没有时间或预算做更多的事情。

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

四处寻找满足我需求的轻量级产品是一片空白,而学习SED虽然有价值,但对于一些不能完全解决我问题的产品来说,可能是相当多的工作。我最终编写了自己的工具,在代码库的一个单独副本上执行所需的重构,直到我很高兴它正是我所需要的。这涉及从visualassists的findallreferences选项获取输出,并使用它重构代码库。我会发布代码,但目前的情况非常糟糕,在不同的代码库下可能会失败。一般问题可以这样说

  • 对于C++代码库,找出函数FN的每一个出现参数,A,B,…n/LI>
  • 从源文件中删除出现的fn
  • 将参数提取为文本变量
  • 添加更多变量,如实例号、源文件名等
  • 在删除fn时,编写一个包含可用变量的格式化字符串
  • 将类似格式的字符串附加到一个或多个外部文件(例如资源文件等)
我猜上面的功能对于已经在解析源代码的人来说很容易实现,并且会将这个问题的链接作为增强建议传递给整个番茄


编辑:对于任何感兴趣的人,都会有一些后续信息。

一次搜索会产生多少点击率?在这种情况下,我经常发现全局搜索加上VS宏已经非常有用了。@sbi-1217 hits。这足以保证编写一点代码而不是手动执行。特别是考虑到我手动完成这类工作的注意力持续时间较短;)如果您有一个输出窗口列出了所有这些内容,您可以使用快捷方式(对于我来说是
F4
),从一个到另一个,然后使用另一个(
Ctrl+Shift+P
,对于我来说,您可以将
F4
一个合并到宏中)。我认为这很简单。我想我做过比这个更糟糕的替换。我用Codewright的正则表达式搜索和替换做过类似的事情。但是要定期备份,因为一次输入就很容易破坏整个代码集:-)@Tony:如果没有VCS的备份,我不敢这样做。你可以在Windows上使用cygwin或MSYS进行备份。@sbi是的,但是一个纯粹的Windows程序员可能不知道如何使用它们。安装cygwin并学习如何使用多个Unix程序执行一次重构有点太多了。确实如此。然而,通常情况下,你可以问一位同事。我一直都是这么做的<代码>:)或powershell,这是免费的,在Windows7中是默认的。