VC++调试配置

VisualStudio在某些环境下,调试的时候总是会出现一些奇怪的现象。本文记录了一些我遇到的一些坑,会持续更新中。

本文作者游蓝海(https://blog.****.net/you_lan_hai),未经许可禁止仍和形式的转载。

调试启动速度很慢

因为符号文件加载的太多。有时候vs会把系统相关的符号文件全部加载进来,会导致调试时启动速度非常慢。在菜单:Tools->Options->Debugging->Symbols中,勾选Only specified modules(仅加载指定模块)。此时默认只加载当前模块(启动项),可以点击Specify modules手动指定要加载的模块。
VC++调试配置

断点无法命中

断点不起作用,vs报警告:“该断点当前无法命中,没有用于此文档的符号文件。”。
VC++调试配置
该问题,一般都是符号文件(pdb)不正确引起的,但是有很多原因会导致符号文件不正确:

  • 程序没有生成调试符号(pdb)文件。在工程属性Linker > Debugging页面中,确保Generate Program Database FileGenerate Debug Info,都被正确的设置上了。
    VC++调试配置
  • 调试信息格式不正确。在工程属性Link -> C/C++页面中,把Debug Information Format设置为:Program Database for Edit And Continue (/ZI)
    VC++调试配置
  • 符号文件和程序不匹配。比如pdb文件是之前生成的,或者存放路径不正确,或者vs自动匹配到了一个旧的pdb文件。可以在模块窗口(Modules)中,选中要调试的模块,右键菜单中选择Symbole Load Information(符号加载信息),可以看到符号的搜索路径:
    VC++调试配置
  • 没有以debug模式启动程序。将构建模式改为Debug,或者确保程序会生成符号文件。
  • 代码所在模块是动态加载进来的。在Tools->Options->Debugging->Symbols中,手动添加exe或dll模块。或者在调试模式下,在模块窗口中,选中要断点的模块,在右键菜单中勾选Always Load Automatically:
    VC++调试配置

参考

  • https://www.c-sharpcorner.com/UploadFile/7078b8/breakpoints-are-not-working-in-visual-studio/
  • https://*.com/questions/8341686/visual-studio-no-symbols-have-been-loaded-for-this-document/8341844#8341844