为什么 Visual Studio 2008 会忽略我的断点?

6
我正在使用带有SP1的Visual Studio 2008。当我调试应用程序时,它会跳过我的断点。
例如,我有两行代码,每个都调用一个方法。我将在这两行上设置断点。我将运行它一次,它会停在第一个断点处,但不是下一个。我再次运行它,它会命中第二个断点,而不是第一个。
我已经尝试了清理解决方案和重建。
我在解决方案中有多个项目。
13个回答

18

符号文件不兼容

你的符号文件(.pdb)可能与你的源代码不同步。这种情况的常见症状包括:

  • 在某一行代码上停在断点处
  • 逐步执行代码
  • 空白行上看到调试指针停止

在调试过程中,你不应该看到调试指针停留在空白行上,这表明你的符号/源代码存在不匹配的地方。

这种不匹配还会导致跳过断点,但是清理解决方案通常可以修复它(听起来你已经尝试过了)。

构建配置

另一个可能性(由其他人提出)是你没有构建一个调试(Debug)配置。虽然可以对发布(Release)构建进行调试,但代码已经被大幅度优化,这可能会导致调试器出现奇怪的行为,例如:

  • 逐步执行条件块(if语句),会让它的if和else两个分支都运行
  • 某些代码片段被完全优化掉,无法打断点

你想要打断点的是什么?

还有一件重要的事情需要注意,就是不能在每一行代码上都设置断点。例如,如果你的代码只有一个变量初始化:

long numObjects;

通常情况下断点不会被正确设置(尽管它通常会移动到“真正”的代码的下一行)。但是,如果你的代码行初始化了变量:

long numObjects = 5;

可以设置断点。


6
尝试删除该项目的.SUO文件,然后重新构建。

这些建议对我非常有效(当其他方法都无效时)!谢谢! - Loki70
@darkgaze 我并不感到惊讶;这种情况有很多原因,而我的解决方案可以解决特定的问题。 - George Stocker
@GeorgeStocker 是的...我正在为这个问题苦苦挣扎:http://stackoverflow.com/questions/22568156/visual-studio-2008-debugger-wrong-instruction-executed-position-qt4-xml - Darkgaze

3

请确保您正在使用调试配置构建应用程序。


请确保您的调试配置中优化选项为 /Od(几乎总是这样,但有时可能会因为意外或其他原因而被更改)。 - Michael Burr

1

此外,移除 VS 可执行文件的兼容模式即可解决该问题。


1

除了上述方法,我还遇到了另外一些断点无法命中的情况:

  • 源代码来自不同的目录树。如果您重命名了目录,则可能会发生这种情况,因为路径已硬编码到 pdb 文件中。当我交换了 trunkbranch 目录并且 VS 打开了其他目录中的文件时,我就被这个问题困扰了。
  • 如果 exe 仍在后台运行,有时会发生这种情况,如果应用程序没有正常退出或某种方式下仍然附加着 mspdbsrv.exe,请检查您的进程列表。重新启动 Visual Studio 通常可以解决此问题。

1

我曾经遇到过与MS Visual Studio 2008 SP1相同的问题。PDB文件与可执行文件匹配,所以这不是问题。

问题出在Visual Assist上。我在“工具|插件管理器”中将其关闭,之后就没有跳过断点的问题了。因此,请关闭您在Visual Studio中安装的任何插件并安装最新的SP(现在是SP1)。


1

1
假设符号加载不是问题,您可以在方法本身上放置一个断点,并通过检查调用堆栈来验证它确实被调用了两次。

1

1

我在VS 2008中遇到了同样的问题,尝试了所有方法花费了大约1个小时,但都没有帮助。

最后尝试以非管理员身份运行VS,然后进行“清理解决方案”->“重新生成解决方案”,就可以正常工作了。

不喜欢Win 7上的VS。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接