VS 调试时 断点失效的原因

      在使用VS调试时,会遇到断点失效的情况,特别是当添加了其他的工程时修改了其文件时,在该文件加断点调试时发生了失效的情况。

原因可能是:

1. 修改了该文件,在调试之前,没有编译修改文件所在的文件,其他工程调用该工程生成的旧的库文件,导致与新修改的源文件不一致导致。解决方法:编译修改文件所在的工程(生成.dll或者.lib)。

2. VS设置的问题。解决:Tools->Option->debugging->General  找到 Require source files to exactly match the original version 不要打勾(工具->选项->调试里->常规 找到  要求原文件与原始版本完全匹配 不要打勾)。


修改当初的理解(2015.4.23):

根本的原因是,在调试时,需要使用PDB文件(与源文件编译成的二进制文件具有相同的唯一标识GUID),而新修改的源文件编译成二进制文件与原来的PDB文件不一致,引起“源代码与原始版本不同”。关于PDB文件参考http://www.cnblogs.com/itech/archive/2011/08/15/2136522.html。

但是为什么新修改的源文件没有与之对应的新的PDB文件?因为没(有)能重新编译生成。所以解决方法是:

1. 重新生成整个项目的解决方案:菜单“生成”->"重新解决方案"。到这里一般就可以解决这个断点失效或者“源代码与原始版本不同”问题,但是有时就是不行。什么原因?可能是源文件引入了一些莫名其妙的字符导致无法重新生成。解决方法:对源文件进行格式化,ctrl+a全选,ctrl+k, ctrl+f 格式化。

2. 在 工具->选项->调试里->常规 找到  要求原文件与原始版本完全匹配 不建议去掉勾,因为这样可能引起当前源文件与PDB不匹配,但仍能调试,但是调试的是按旧的PDB信息来调试新的源文件,这样调试显然有问题。


你可能感兴趣的:(C++)