当两个Visual Studio进程并行编译时,第二个将重用第一个开始的mspdbsrv实例。因此,当第一个构建终止并且整个进程树终止(例如,通过Jenkins)时,另一个构建失败。
该错误报告描述了如何手动启动它,以免被杀死。但是,这件事也因偶尔忘记关闭文件而闻名,这可能会使下一个构建失败。
是否有选项组合,完全不使用mspdbsrv

好的,我正在寻找一个通用的答案,因此一开始我没有包括当前选项。但是,当不使用某些选项时,到目前为止不应使用类似mspdbsrv的答案。除了在(用于CMake的)微不足道的测试项目中检查MSC++是否正常工作之外,其他项目均未使用,但它确实会启动mspdbsrv.exe。琐碎的项目是.vcproj文件,通过devenv.com CompilerIdC.vcproj /build Debug编译。该构建针对C运行以下命令:

和以下C++命令:

这仍然会启动mspdbsrv.exe。我实际上利用了它确实能够暂时保护它免受 Jenkins 杀手的侵害的事实。
选项/FDdevenv.com注入(inject)。我试图通过msbuild运行它,但是它将调用vcbuild(Visual Studio 2008),并执行包括/FD选项在内的相同命令。而且WinCE目标仅受CMake中的Visual Studio生成器支持,因此我无法轻松地进行制作。

最佳答案

这不是常见的投诉,connect.microsoft.com上没有针对它的现有反馈报告。否则,建议采用加速解决此类问题的方法,您一定会让Microsoft工程师研究此问题。

否,没有禁用mspdbsrv.exe的特定选项。相反只有一个,要启用即可。 /FS option强制编译器使用它。

强烈提示您使用的编译器选项在构建机器上不常用。您没有记录任何文件,因此需要猜测。排名第一的候选人是/MP option。这总是要求编译器使用mspdbsrv.exe,因为它将多次启动编译器,每次都对传递的源文件之一进行操作。由于每个编译器实例可能都想写入相同的.pdb文件(尤其是/Fd option中指定的程序数据库),因此需要mspdbsrv.exe的方案。

因此,请查看您的构建脚本并删除/MP(如果看到的话)。记录下接下来传递给编译器的选项。强烈建议在connect.microsoft.com上提交反馈报告。

更新后:您的构建服务器使用的/FD选项不正确。 MSDN库文章对此有此说法:



我无法预测它对mspdbsrv.exe会产生什么影响,因为/FS与/Gm紧密链接,而/FS与/FD紧密链接,因此很有可能会产生影响。显然,下一步是删除该选项。

关于windows - 在Visual Studio(2008)中进行编译时避免使用mspdbsrv,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22988860/

10-11 16:29