首页 > 解决方案 > 调试后 PDB 保持打开状态(Windows 10、Visual Studio)

问题描述

我们以前的开发系统使用 Windows XP 和 Windows 7。从 Visual Studio 调试 C++ DLL 效果很好。

最近迁移到 Windows 10 导致了一个恼人的问题。我们可以调试一次(使用F5),但第二次会导致链接器错误:

MyProg fatal error LNK1201: error writing to program database 'MyProg.pdb'

在 Visual Studio 仍处于打开状态时尝试在资源管理器中手动删除 .pdb 会导致错误:

The action can't be completed because the file is open in devenv.exe

是否命中断点并不重要。一旦出现问题就开始调试。重新启动 Visual Studio 解决了该问题(在某种意义上,您可以调试一次,但随后您又遇到了问题)。

如果相关:

标签: visual-studiodebuggingvisual-studio-2003

解决方案


在搜寻了几个小时后,一些相关但未得到解答的问题被发现。遵循此 MSDN 文章中的建议以及我自己的一些调试,此解决方案有效:

  • 下载FreePDB,一个由 MSDN 用户Toni76编写的脚本(感谢 Toni!)
  • 将此脚本复制到本地文件夹(例如C:\Apps\FreeDPB
  • 下载最新版SysInternals工具Handle(目前为v4.21)
  • 复制handle.exeC:\Apps\FreeDPB
  • 注意!从命令行运行handle /?一次。这是为了同意 EULA。如果您跳过此步骤,脚本将无法运行!
  • 打开 Visual Studio,然后项目 > 属性 > 生成事件 > 预生成事件
  • 设置Command LineC:\Apps\FreeDPB\freepdb $(ProjectName)
  • 设置DescriptionDelete lock on PDB

...现在您无需重新启动 Visual Studio 即可进行第二次调试!

根据评论,这适用于多个版本的 Windows 上的多个版本的 Visual Studio。

更新

这里描述了一个更激进的解决方案,它涉及替换核心 Visual Studio DLL ( NatDbgDE.dll)。不过,此解决方案仅适用于 Visual Studio 2003 SP1。


推荐阅读