如何在Visual Studio 2019中通过命令行给C++程序生成.pdb文件
解决Visual Studio 2019 cl.exe命令行生成pdb调试文件的参数配置
你当前使用的命令缺少编译阶段生成调试信息的核心参数,且链接器参数未做标记,导致pdb无法正常生成,正确配置如下:
单步编译+链接生成pdb的正确命令
cl.exe myprogram.cpp /Zi /Fdmyprogram.pdb /Famyprogram.asm /Femyprogram.exe /link /DEBUG:FULL
参数说明:
/Zi:编译阶段生成包含完整调试信息的obj文件,这是生成pdb的前提,缺少该参数时编译器不会输出调试符号相关内容,链接阶段自然无法生成pdb/Fdmyprogram.pdb:指定编译阶段生成的中间pdb文件的输出路径和名称/link:标记后续参数为链接器参数,避免cl将链接参数识别为编译参数/DEBUG:FULL:链接器参数,生成包含全量调试信息的最终pdb文件,可适配各类独立调试器
拆分编译、链接步骤的方案(适配多文件项目)
编译阶段(仅生成obj,不链接)
cl.exe /c /Zi /Fdmyprogram.pdb /Famyprogram.asm myprogram.cpp
链接阶段(生成exe和最终pdb)
link.exe myprogram.obj /OUT:myprogram.exe /DEBUG:FULL /PDB:myprogram.pdb
此处/PDB参数指定的是最终和exe配套使用的pdb文件,可和编译阶段的/Fd参数值不一致。
常见排查点
- 必须在Visual Studio 2019对应版本的开发者命令提示符中运行命令,普通cmd环境下可能出现参数识别异常
- 调试时需要保证pdb和exe的生成时间完全匹配,重新编译后需要同步替换pdb,否则调试器会判定符号不匹配
- 调试阶段建议关闭
/O2等优化参数,避免调试信息被裁剪导致pdb内容缺失
内容的提问来源于stack exchange,提问作者Rafael Sales
相关产品推荐
相关产品推荐

