在Visual Studio C ++中打印每个文件的编译时间

问题描述 投票:9回答:3

如何在Visual Studio 2005项目中创建一个表来获取每个c ++文件的编译时间。

visual-studio visual-studio-2005
3个回答
7
投票

我正在使用Visual Studio 2010,但其他版本的Visual Studio可能有类似的东西。在VS2010中,您可以添加命令行选项/ Bt +,它打印编译每个文件所用的时间。所以在“配置属性” - >“C / C ++” - >“命令行” - >“其他选项”下的项目属性中添加/ Bt +

设置/ Bt +选项会导致输出(记录在日志文件中)行如下所示:

time(c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c1.dll)=0.05110s < 25394686804 - 25394831194 > BB [C:\not-important\nlopt-2.4.2\direct\DIRect.c]

关于https://blogs.msdn.microsoft.com/vcblog/2010/04/01/vc-tip-get-detailed-build-throughput-diagnostics-using-msbuild-compiler-and-linker/这个选项的更多信息,我发现这要归功于这个答案https://stackoverflow.com/a/3513043/453436

根据您可以使用的工具,有很多方法可以提取时间线。我使用find,grep和perl的组合在bash shell下完成。以下将为您提供排序最长的编译时间。

find . -name '*.log' | xargs grep time | perl -ne '$_ =~ /=(.*?)s.*\[(.*)\]/; print "$1 $2\n";' |sort -rn

4
投票

“工具” - >“选项” - >“项目和解决方案” - >“VC ++项目设置”

勾选“构建时间”。


0
投票

我已经使用了那个版本的编译器已经有一段时间了,但我记得它打印了它编译到控制台的文件的名称(当你使用命令行构建时)。如果是这种情况,那么您可以编写一个执行以下操作的程序:

  1. 命令行编译器上的CreateProcess,将stdout重定向到管道
  2. 从管道中读取,查找源文件名
  3. 每次看到源文件名时,请记下当前时间戳
  4. 管道关闭时,打印出每个文件构建所花费的时间

虽然这种方法可以用C ++开发,但使用Perl等工具来实现它可能会更容易。

© www.soinside.com 2019 - 2024. All rights reserved.