我们以前的开发系统使用 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 可以解决该问题(从某种意义上说,您可以调试一次,但随后又会遇到问题)。
如果相关:
- x86 Visual Studio 2003.NET
- 针对另一个 x86 应用程序
- x64 Windows 10 专业版 v1803
最佳答案
经过几个小时的搜寻,发现了一些相关的内容,但是unanswered ,发现问题。遵循 this MSDN article 中的建议,加上我自己的一些调试,这个解决方案有效:
- 下载 FreePDB ,MSDN 用户 Toni76 编写的脚本(谢谢托尼!)
- 将此脚本复制到本地文件夹(例如
C:\Apps\FreeDPB
) - 下载最新版本的 SysInternals 工具 Handle (当前为 v4.21)
- 将
handle.exe
复制到C:\Apps\FreeDPB
- 注意!从命令行运行
handle/?
一次。这是同意 EULA。如果跳过此步骤,脚本将无法运行! - 打开 Visual Studio,然后选择“项目”>“属性”>“构建事件”>“预构建事件”
- 将
命令行
设置为C:\Apps\FreeDPB\freepdb $(ProjectName)
- 将
描述
设置为删除 PDB 上的锁定
...现在您无需重新启动 Visual Studio 即可进行第二次调试!
根据评论,这适用于多个版本的 Windows 上的多个版本的 Visual Studio。
更新
描述了更激进的解决方案 here其中涉及替换核心 Visual Studio DLL (NatDbgDE.dll
)。不过,此解决方案仅适用于 Visual Studio 2003 SP1。
关于visual-studio - 调试后 PDB 保持打开状态(Windows 10、Visual Studio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54648650/