【发布时间】:2021-07-24 05:36:58
【问题描述】:
我有一个包含 12 个 C++ 项目的 Visual Studio 解决方案。一半的项目构建静态库,另一半构建原生桌面可执行文件。
当我从 Visual Studio 2019 的菜单(构建 > 重建解决方案)重建整个解决方案时,它似乎可以工作——我得到了功能性、可调试的可执行文件。但是,缺少某些静态库的某些 PDB。当我深入研究构建日志时,我看到很多这样的链接器警告:
wingui.lib(text.obj):警告 LNK4099:在 'wingui.lib(text.obj)' 或 'D:\code\aid\apps\vcell\x64 中找不到 PDB 'wingui.pdb' \调试\wingui.pdb';链接对象好像没有调试信息
确实,wingui.pdb通常会丢失,但偶尔它会在应有的位置生成。如果我关闭构建中的并行性,它总是存在的。比赛条件?
2021 年 7 月 24 日更新
使用 Sysinternals 工具集中的 procmon,我在干净重建期间将所有操作记录到 wingui.pdb。总结如下:
- MSBuild 查找
wingui.pdb并发现它不存在。 - CL 创建它,写入它,读回其中的一部分,再写入一些,然后关闭它。
- MSBuild 打开
wingui.pdb,设置FILE_DISPOSITION_DELETE,然后关闭文件。 嗯? - mspdbsrv 多次尝试打开
wingui.pdb。当然,每次尝试都失败了,因为 MSBuild 删除了它。
谁能解释第 3 步?为什么 MSBuild 会将新制作的 PDB 文件标记为删除?
【问题讨论】:
标签: c++ visual-studio msbuild