Loading... # 问题 在用 VS 2017 调试一个 C++ 小程序时,发现一些问题阻碍了调试,记录如下。 ## 1、界面一直无响应,断点始终无法断下 这是因为 VS 在加载符号。VS 默认加载程序的所有符号信息,一般地就是从指定的符号服务器下载 dll 对应的 pdb 符号文件并从中读取符号信息,并且在符号加载完成后才开始进行调试。 开始调试后界面始终没有响应并且没有触发断点,是因为此时 VS 还没有加载完所有的符号。 要解决该问题,其一可以想办法加快符号的加载速度,如: * 通过代理等方法,加快从符号服务器下载符号文件的速度 * 在本地做符号文件的缓存处理 符号文件的缓存,通过在系统环境变量中设置 **_NT_SYMBOL_PATH** 项,并在 VS 的【工具】【选项】【调试】【符号】中设置勾选符号文件的位置即可,看图一及图二。这个方法是 VS 和 windbg 都共用的。 ![设置符号路径缓存.png](http://47.117.131.13/usr/uploads/2021/06/4240734870.png) 其二是可以选择只加载部分模块符号,在 VS 的【工具】【选项】【调试】【符号】,勾选【仅加载指定的模块】并设置仅加载的符号,图示: ![仅加载模块符号.png](http://47.117.131.13/usr/uploads/2021/06/822017130.png) *注意,要把当前项目的 exe 也添加进去。* ## 2、当前不会命中断点,还没有为文档加载任何符号 断点处提示“当前不会命中断点,还没有为文档加载任何符号”。两个思路: * 要么没有设置加载断点所在模块的符号,此时检查上述问题一 * 要么没有找到断点所在模块的符号,如没有下载成功,符号文件出错,或者没有生成符号文件等 这里针对【没有生成符号文件】,做一解决方案,尤其是断点所在模块正好是自己编写的模块,而非系统模块时。 在 VS 的项目属性,【C/C++】【常规】【调试信息格式】项,如果选择“无”,则不会生成符号文件,更改为“程序数据库 (/Zi)”即可。 --- 要是还不行,其它的问题且发现且记录吧。 最后修改:2021 年 06 月 14 日 05 : 31 PM © 允许规范转载