在不停止调试的情况下重建项目

时间:2015-07-08 14:07:43

标签: c++ visual-studio visual-studio-2012 msbuild

我有一个Visual C ++解决方案,它包含一个StartUp项目和许多DLL项目,这些项目由StartUp项目动态加载和卸载。我想在不停止当前调试会话的情况下重建DLL项目。然而,尝试这个将提示我"你想停止调试吗?"弹出窗口。

在项目上手动运行msbuild将失败:

"D:\MySolution\MyDLLProject\dllproject.vcxproj" (default target) (1) ->
(Link target) ->
  LINK : fatal error LNK1201: error writing to program database 'D:\MySolution\compiled\DebugDB\MyDLLProject\Debug\dllproject.pdb'; check for insufficient disk space, invalid path, or insufficient privilege [D:\MySolution\MyDLLProject\dllproject.vcxproj]

有没有办法规避这个?

3 个答案:

答案 0 :(得分:2)

错误的原因是MSVC调试器当前正在使用pdb文件。在调试模式下构建项目时,需要覆盖此文件,但这是不可能的,因为您无法删除当前正在使用的文件。

  

程序数据库(PDB)文件包含调试和项目状态信息,允许增量链接程序的Debug配置。它还存储调试信息。

因此,如果您在没有pdb文件的情况下构建项目,则可以在调试时构建它。但在这种情况下,由于您的pdb文件已过时,您无法调试您的应用程序。这意味着,重建项目并在应该停止调试器会话后能够调试它。或者,作为一个值得怀疑的解决方案,您可以将其构建到另一个目录中以避免pdb文件写入冲突。

答案 1 :(得分:2)

您需要确保您的新版本的dll生成的pdb文件与上一次构建不同。

使用命令行构建dll,您可以调用编译器/链接器 使用命令行开关-PDB:>> PDBFILENAME_%random%.pdb<<

这将创建一个pdb文件,每次重新编译时都会有所不同。

实施例: cl main.cpp -LD / link -PDB:test_%random%.pdb

答案 2 :(得分:1)

VS内部有内置机制可以阻止这种情况的发生。

(只需在C#MVC项目中进行测试)

使用(Ctrl + F5)代替使用(F5)进行编译。 这将编译您的解决方案,而不会在浏览器上附加调试器。

请勿关闭Bowser选项卡,然后返回Visual Studio。更改控制器或类中的任何内容。 您将看到Visual Studio可以像停止解决方案时一样平稳运行。

现在,按(Ctrl + Shft + B)调用构建机制。这将生成所有新的dll

再次切换到浏览器并刷新页面(F5或Ctrl + r)

这可以节省时间!

总结

  1. VS:Ctrl + F5
  2. chrome:呈现页面
  3. VS:更改所有内容Ctrl + Shift + B
  4. chrome:Ctrl + r