【问题标题】:How to enable build debugging in MSVS 2015?如何在 MSVS 2015 中启用构建调试?
【发布时间】:2015-07-28 19:47:31
【问题描述】:

我在 MSVS 2015 中有一个项目,它每次都在虚假地重建,即构建总是启动 MSBuild,然后给出一堆“所有输出都是最新的”。后跟“构建成功”的消息。而不是应该什么都不做。在 MSVS 的早期版本中,有一种(从未记录过的 AFAIK)方法可以启用详细调试日志记录,以快速找到原因,如解释的那样,例如here。不幸的是,这似乎对 MSVS 2015 没有任何作用。

有谁知道是什么取代了它或其他调试这个问题的方法?

【问题讨论】:

  • 您是否将构建输出详细程度设置为诊断(工具->选项->项目和解决方案->构建和运行)?通常,相当冗长的构建协议应该会提示您出了什么问题。最有可能的是,某些文件设置为“始终复制”......顺便说一句,如果什么都不做,你可能会得到输出行,比如“跳过 xy,未选择构建项目”
  • 对不起,我应该提到我确实尝试过这个,但它并没有真正帮助,因为日志以 ------ Build started: Project: foobar, Configuration: Debug Win32 ------ 之类的开头,如果有一些解释为什么它从 3000 开始后面的行,我找不到。我真正的问题是为什么它首先开始构建。
  • 3000? 300000 更有可能 :D 但是如果你知道你在找什么,你可以大大减少这个:看看每个项目的第一行。在那里,VS 说明了它想要构建项目的原因,例如“13>Project 'Rotor (Rotor\Rotor)' 不是最新的。上次构建时使用未保存的文件。”或“17>项目'ProductDatabaseImport'不是最新的。输入文件'something.dll'在输出文件''之后被修改。”
  • 在特定示例中的构建日志中没有出现“不是最新的”或“上次构建”的情况,这促使我回到这个问题,不幸的是......
  • FWIW 我终于找到了为什么这个特定项目一直在重建:它是一个从生成的 C++ 文件构建的静态库,不知何故,图书管理员没有更新库上的时间戳(几乎可以肯定是因为生成的文件没有改变,所以目标文件可能也没有改变)。所以输出比依赖项更早。我花了很长时间才找到它,所以我仍然希望有更好的方法来做到这一点。

标签: visual-studio-2015 msbuild


【解决方案1】:

我在签出和解压缩某些具有未来日期的文件时遇到了非常相似的问题。这会导致整个项目在没有任何更改的情况下重新构建。

在 *nix 系统上,我会使用 touch 来修复,但在 Windows 上,我在 cmd.exe 上使用 FOR 命令:

FOR /R %I in (*.*) do copy /b "%I" +,,

将时间戳更新为当前 (iirc)。


在我弄清楚之前,我试图改变构建过程的详细程度。更改此设置后需要重启 VS2015:


另外,使用Configuration Properties -> C/C++ -> General 打开启动横幅。这为您提供了更多构建命令。

【讨论】:

  • 问题在于,这(未来的日期)只是虚假重建的众多或至少几个可能原因之一。我过去确实看到过这个,而且我还看到了最常见的一个,它在项目中有一个不存在的文件(不用于其他用途,例如标题)。我在上面向我描述了一个新的。以前的 MSVS 版本中的构建调试对直接发现问题有很大帮助,MSBuild 详细诊断对此并没有真正的帮助(请参阅我对上面 cmets 的回复,了解原因)。我真的很困惑为什么他们会删除如此有用的功能......
猜你喜欢
  • 1970-01-01
  • 2017-11-13
  • 2012-07-15
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多