visual-studio - 调试后 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 解决了该问题(在某种意义上,您可以调试一次,但随后您又遇到了问题)。
如果相关:
- x86 Visual Studio 2003.NET
- 针对另一个 x86 应用程序
- x64 Windows 10 专业版 v1803
解决方案
在搜寻了几个小时后,一些相关但未得到解答的问题被发现。遵循此 MSDN 文章中的建议以及我自己的一些调试,此解决方案有效:
- 下载FreePDB,一个由 MSDN 用户Toni76编写的脚本(感谢 Toni!)
- 将此脚本复制到本地文件夹(例如
C:\Apps\FreeDPB
) - 下载最新版SysInternals工具Handle(目前为v4.21)
- 复制
handle.exe
到C:\Apps\FreeDPB
- 注意!从命令行运行
handle /?
一次。这是为了同意 EULA。如果您跳过此步骤,脚本将无法运行! - 打开 Visual Studio,然后项目 > 属性 > 生成事件 > 预生成事件
- 设置
Command Line
为C:\Apps\FreeDPB\freepdb $(ProjectName)
- 设置
Description
为Delete lock on PDB
...现在您无需重新启动 Visual Studio 即可进行第二次调试!
根据评论,这适用于多个版本的 Windows 上的多个版本的 Visual Studio。
更新
这里描述了一个更激进的解决方案,它涉及替换核心 Visual Studio DLL ( NatDbgDE.dll
)。不过,此解决方案仅适用于 Visual Studio 2003 SP1。
推荐阅读
- angular - 尝试在 Angular 中调用“model.predict”时出现 Clarifai 对象错误
- c# - 字符串中出现一次的每个字母的正则表达式
- django - 如何从 DRF 中删除自动生成的字段 - Swagger UI
- c# - 如何使用 C# 或 PowerShell 知道用户在 Exchange 上是否有邮箱
- c# - 当我在 Xamarin.Android 中有一个 uri 对象时,如何获取字节数组?
- selenium - 在 ChromeDriver 中设置 PDF 打印的默认打印机和目录
- angular - 自定义验证器参数不会对更改做出反应
- ios - 在 Telegram 中发布一个在 iOS 上打开 Instagram 应用程序的链接
- node.js - 这个 NodeJs multer 文件上传代码有什么问题?
- php - 将 JSON 字符串发送到需要对象数组的 API 时出现问题