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

Rebuild project without stopping debugging

我有一个 Visual C++ 解决方案,其中包括一个 StartUp 项目和许多由 StartUp 项目动态加载和卸载的 DLL 项目。我想在不停止当前调试会话的情况下重建 DLL 项目。但是尝试这样做会提示我 "Do you want to stop debugging?" 弹出窗口。

手动 运行 项目上的 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]

有什么办法可以避免这种情况吗?

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

A program database (PDB) file holds debugging and project state information that allows incremental linking of a Debug configuration of your program. It also stores the debug information.

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

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

使用命令行构建您可以调用的 dll compiler/linker 使用命令行开关 -PDB:>>PDBFILENAME_%random%.pdb<<

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

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

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

(刚刚用 C# MVC 项目测试过)

使用 (Ctrl + F5) 代替 (F5) 编译。 这将在没有调试器附加到浏览器的情况下编译您的解决方案。

不要关闭浏览器选项卡并返回 Visual studio。更改控制器或 class 内的任何内容。 你会看到 Visual Studio 像解决方案停止时一样流畅。

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

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

这可以节省时间!

总结

  1. 对战:Ctrl + F5
  2. chrome: 呈现页面
  3. VS:更改任何内容 Ctrl + Shift + B
  4. chrome: Ctrl + r