调试后 PDB 保持打开状态(Windows 10,Visual Studio)

PDB remains open after debugging (Windows 10, Visual Studio)

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

最近升级到 Windows10 导致了一个烦人的问题。我们可以调试一次(使用 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 可以解决问题(从某种意义上说,您可以调试一次,但随后又会遇到问题)。

如果相关:

在搜索了几个小时后,一些相关的,但是 unanswered, questions were found. Following suggestions in this MSDN article,连同我自己的一些调试,这个解决方案有效:

  • 下载FreePDB, a script written by MSDN user Toni76(感谢 Toni!)
  • 将此脚本复制到本地文件夹(比如 C:\Apps\FreeDPB
  • 下载最新版本的 SysInternals 工具Handle(目前为 v4.21)
  • 复制handle.exeC:\Apps\FreeDPB
  • 注意!从命令行,运行 handle /? 一次。这是同意 EULA。如果您跳过此步骤,脚本将无法运行!
  • 打开 Visual Studio,然后项目 > 属性 > 构建事件 > 预构建事件
  • Command Line设置为C:\Apps\FreeDPB\freepdb $(ProjectName)
  • Description设置为Delete lock on PDB

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

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

更新

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

在我的例子中,这是由于 "Process Explorer" 程序,它与我的 Visual Studio 一起打开(我用它来检查我创建的 exe 的一些属性)。关闭后问题解决。