在一次代码调试过程中,发现明明设置了的断点,但是VS始终不能在断点的位置停下来。
使用了以下方法:无效
1) 网上的说法是重新编译整个工程。我尝试了先删除SDF文件并重新编译,问题依旧。
2) 检查了各个资源ID,确认没有重复的ID,文件依旧。
3) 还有一种方法可以解决此问题,但是我认为不够好。
点击菜单栏“调试”》“选项和设置”》“常规”》去掉“要求源文件与原始版本相同”前面的勾。
这种方法没有要求源文件的版本和生成二进制文件的源文件版本一致,可能会导致一些意想不到的问题,比如变量名无法监视之类。
4) 尝试删除生成的PDB文件,然后重新编译,文件依旧。
以下方法解决了问题
网上还有另一种方法,使用VS里的格式化功能可以解决此问题。
具体为首先全选出问题的源文件,然后点击VS菜单栏:编辑-高级-格式化选择。然后保存源文件,再次调试就可以命中断点了。
另外还有一种方法,就是在出问题的源文件的任意一行输入一个制表符按键(TAB),然后保存文件,也可以解决此问题。
总结
此问题在VS2010上出现,VS的更高版本我还没有测试过。具体的原因还没有找到,但你如果碰到了此问题,费尽千辛万苦都没有找到解决之道,可以试试输入一个TAB看看。
更新
经过研究发现,此问题和BEGIN_MESSAGE_MAP/END_MESSAGE_MAP这一套宏的位置有关。
以下代码片段会导致断点不能命中:
选中BEGIN_MESSAGE_MAP/END_MESSAGE_MAP这一代码块,然后使用VS的”编辑-高级-格式化选择”功能,代码会变为如下的样子:
从以上两段代码片段中我们看到,VS在格式化的时候,认为BEGIN_MESSAGE_MAP/END_MESSAGE_MAP需要向右移动一个Tab键,如果你的代码类似于上面第一个代码片段,那么你可能也会碰到代码在调试阶段无法命中断点的问题。我推测这可能是VS2010版本的一个小Bug。