我有一个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]
有没有办法规避这个?
答案 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)
这可以节省时间!
总结