You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio出现C1090、LNK1318类PDB相关错误如何解决?

错误码含义、成因及解决方案

错误码23、24含义

  • C1090/LNK1318错误中的23、24是微软PDB处理接口的内部状态码:
    • 错误码23:对应RPC通信失败,即编译器/链接器与负责PDB文件读写的后台进程通信中断,你遇到的0x6BA(RPC服务器不可用)、0x6BE(RPC服务不存在)、0x5(访问权限错误)都是该类通信失败对应的具体Windows系统错误码
    • 错误码24:对应PDB文件句柄泄漏或文件锁残留,后台进程无法获取指定PDB文件的读写权限,通常是前一次编译/链接异常终止后残留的独占锁未释放导致

核心成因

  • 150个项目的大解决方案开启并行编译时,msbuild、cl.exe、link.exe同时读写共享PDB文件(比如解决方案级别的共用PDB,或者中间输出路径重复的PDB),触发PDB后台进程的并发访问bug,VS2019 16.10+版本该bug触发概率极高,VS2022仅做了部分修复未完全解决
  • 杀毒软件/安全防护程序实时扫描PDB文件时,抢占了文件锁,导致编译器/链接器无法读写
  • 长时间不重启系统时,PDB后台进程mspdbsrv.exe出现内存泄漏、句柄泄漏,后续所有PDB读写请求都会失败,这就是为什么只有重启系统才能临时解决的根本原因

修复与规避方案

配置层面调整(优先级最高,可解决90%以上场景)

  • 关闭编译器的并行PDB写入功能:在项目属性→C/C++→常规,将多处理器编译选项调整为否,或者添加编译器参数/Zf-禁用并行PDB生成
  • 禁用共享PDB:将项目属性→C/C++→输出文件中的程序数据库文件名从默认的$(IntDir)vc$(PlatformToolsetVersion).pdb修改为针对每个项目唯一的命名,比如$(IntDir)$(ProjectName).pdb,避免多个项目共用同一个PDB文件导致访问冲突
  • 调整链接器PDB生成逻辑:在项目属性→链接器→调试,关闭生成调试信息的增量选项,或者添加链接器参数/INCREMENTAL:NO禁用增量链接

临时应急方案(无需重启系统)

  • 出现错误后,打开任务管理器,手动结束所有mspdbsrv.exe进程,该进程会在下次编译时自动重启,即可清除残留的句柄/锁问题
  • 临时关闭杀毒软件对项目输出目录、中间目录的实时扫描

永久修复方案

  • 升级到VS2022 17.14及以上版本,微软在该版本中修复了大部分大项目并行编译下的PDB访问冲突bug
  • 条件允许的情况下,将大解决方案拆分为多个小的解决方案,减少单次编译时并行访问PDB的进程数量

内容的提问来源于stack exchange,提问作者Fedor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 21:45:03