为什么Visual Studio 2008会跳过我的断点?

时间:2009-03-17 22:54:40

标签: visual-studio-2008 breakpoints

我正在运行带有SP1的Visual Studio 2008。当我调试应用程序时,它将跳过我的断点。

例如,我有两行代码,每行代码调用一个方法。我会在两条线上都设一个断点。我会跑一次,它会在第一个断点停止,但不会在下一个断点停止。我会再次运行它,它会撞到第二个,而不是第一个。

我试图清理解决方案并进行重建。

我在解决方案中有多个项目。

13 个答案:

答案 0 :(得分:17)

符号文件不兼容

您的符号文件(。pdb)可能与您的源代码不同步。常见的症状是:

  • 在代码行上的断点处停止
  • 单步执行代码
  • 看到调试指针停在代码
  • 空行

调试时,你永远不应该看到调试指针停在一个空行上,这表明你的符号/源不匹配。

这种不匹配也可能导致像你看到的那样跳过断点,但清理解决方案通常会修复它(听起来你已经尝试过了)。

构建配置

另一个选项(由其他人建议)是您没有构建调试配置。虽然可以调试Release版本,但代码已经过显着优化,这会使调试器行为异常,例如。

  • 单步执行条件(即if块)可能会使if和else案例都显示正在运行
  • 完全优化了一些代码,你不能打破它们

你想要打破什么?

另一个需要注意的重要事项是,无法在每行代码上设置断点。例如,如果您的代码只有一个变量初始化:

long numObjects;

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

long numObjects = 5;

断点可以设置。

答案 1 :(得分:6)

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

答案 2 :(得分:3)

确保使用调试配置构建应用程序。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我遇到了这个问题,不得不安装修补程序。有关详细信息,请参阅http://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/f3fcb4fb-8a08-4fa0-8d58-9ed6f3eb1193

答案 5 :(得分:1)

我遇到了与MS Visual Studio 2008 SP1相同的问题。 PDB文件匹配可执行文件,因此不是问题。

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

答案 6 :(得分:1)

除了上述方法之外,我还遇到了另外几个没有遇到断点的情况:

  • 源来自不同的目录树。如果您重命名了目录,则会发生这种情况,因为路径被硬编码到pdb文件中。当我换了一个trunkbranch目录并且VS打开了另一个目录中的文件时,这让我抓狂了。
  • 如果exe仍然在后台运行,如果应用程序没有干净地退出或者某种程度上mspdbsrv.exe仍然附加到它,有时会发生这种情况,请检查您的进程列表。重新启动Visual Studio经常修复此问题。

答案 7 :(得分:1)

我在VS 2008中遇到了同样的问题并尝试了所有花费约1小时但没有帮助的事情。

最后尝试在没有管理员的情况下运行VS,然后使用Clean Solution-> Rebuild Solution并正常运行。

不喜欢Win 7上的VS

答案 8 :(得分:1)

此外,在VS可执行文件的兼容模式下删除运行可以解决问题。

答案 9 :(得分:1)

我遇到了同样的问题,安装VS 2010 SP1解决了这个问题。我在SQL 2008中打破了Intellisense的副作用,你可以在这里阅读:Sql Server 2008 R2 Management Studio - no Intellisense

答案 10 :(得分:0)

如果断点没有显示为纯红色气泡,而是红色圆圈则会被禁用。如果它是带有小黄色警告标志的红色圆圈,则您附加的进程未加载该模式的符号。确保您尝试调试正确类型的代码(Managed / Native / T-SQL / Script)。

答案 11 :(得分:0)

我猜您将项目更改为优化代码,因此,没有可用的调试信息(包括使用断点的能力)。

要更正此问题:打开项目,单击menu-> project->(your_project)属性...,单击编译选项卡,单击高级编译选项,然后: - 取消选择“启用优化” - 在生成调试信息列表中,选择“完整”。 - 单击“确定”,关闭并保存所有内容。 现在应该工作。

MFR>

答案 12 :(得分:0)

对于 网站 ,如果MSVS的单独实例运行在同一网站上,则会发生这种情况。

只需停止原始实例或停止IIS Express。

MSVS似乎启动了第二个网站而没有抱怨在同一个端口上运行的预先存在的网站。可能浏览器中显示的页面实际上是第一个网站。