Visual Studio Debugger跳过断点

时间:2010-01-08 09:14:34

标签: visual-studio-2008 unit-testing debugging

我的Visual Studio 2008 IDE在调试单元测试时表现得很奇怪:我有一个断点,当我点击它然后尝试使用F10时,测试结束。如果我在被测试方法内的每一行上设置断点,我将以随机方式结束,而不是下一行中的下一个。在清理系统重启后,我已经清理并重建了解决方案。这种行为仍然存在。有没有其他人经历过这个并得出结论。

此测试仅使用主执行线程(没有创建其他线程)

13 个答案:

答案 0 :(得分:27)

发布了一个VS2008 SP1修补程序,解决了许多调试问题。知识库文章is here,修补程序下载is here


更新:修补程序下载位置已停用,我不知道另一个下载位置。如果找到,请编辑这篇文章。

答案 1 :(得分:9)

如果您调试发布版本会发生此行为(因为行已经过优化)。

过去我也碰巧遇到了我在其他地方调试一个较旧的exe(由项目配置设置),而不是最近构建的那个; ^)

答案 2 :(得分:4)

我在VS 2003上遇到了类似的问题。事实证明我使用了错误的符号,因此无法绑定到正确的源代码。

确保以下内容:

  1. 您正在使用Debug构建(或关闭任何类型的优化)
  2. 该构建输出路径正常(“Project Properties \ Linker \ Output File”与您正在调试的exe匹配)
  3. 您没有在变量声明上放置断点: 也就是说,如果你在“int some_variable;”上放置一个断点,你将永远不会击中它,而是在你定义\初始化某些东西或调用某些方法之后,你会在它之后找到第一个位置
  4. 您无法使用F10(执行下一个语句)但是使用F11(执行下一个语句并执行方法调用)
  5. 确保断点上没有任何过滤器(即命中计数或条件)
  6. P.S。尝试放置DebugBreak();两种方法中的函数(除非这个代码在某个循环中执行,所以这可能令人沮丧)。这会导致在执行到达任何这些功能时终止您的进程(因此您可以继续从该特定位置进行调试)。

答案 3 :(得分:3)

当您运行多个线程时,也会发生此行为。

答案 4 :(得分:2)

即使在Debug构建中,编译器优化也可以解释这种行为。在项目属性“构建”下,验证是否已关闭“优化代码”复选框。我已经看到在从.Net 1.1升级某些项目后默认启用此功能。

答案 5 :(得分:2)

您是否将断点放在生成类的代码中?

我在服务引用的客户端站点上遇到过此问题。生成的类是带

的部分类
    [System.Diagnostics.DebuggerStepThroughAttribute()]

属性已应用。即使我的断点位于不同的文件中,但仍然属于属性类,断点也会被跳过。

我从生成的Reference.cs文件中删除了该属性,调试器按预期工作。

当然,这不是一个永久的解决方案,因为如果重新生成Reference.cs文件,该属性将返回。

答案 6 :(得分:0)

这可能与测试框架未加载您当前正在处理的相同程序集的情况一样简单。我在极少数情况下会在NUnit中发生这种情况,它可以处理被测组件的副本;偶尔,它会停止复制最新版本。你的断点是否饰有“符号尚未加载”指示符?

答案 7 :(得分:0)

进入Project->属性并取消选中“优化代码”

如果您看到DataSet ds = new DataSet()等代码,就会出现这种情况。在调试器上被击中,但代码如字符串Test =“Test”;被跳过了。

答案 8 :(得分:0)

可能为时已晚,无法回复,我在VS2012中遇到了同样的问题,请检查菜单测试> TestSettings>选中“LocalTestRun.TestRunConfig”,如果选中则取消选中它,它将停止跳过代码行。对于Vs2008也可以是相同的。

答案 9 :(得分:0)

我在Visual Studio社区2013中遇到过这种情况。这种行为似乎是设计上的。运行测试时,执行不会在断点上停止。如果希望执行在断点处停止,请选择TEST - >调试而不是TEST - >运行

答案 10 :(得分:0)

我的单元测试是在x86下测试的。将它们更改为x64有效。

菜单

Test - > Test Settings - > Default Processor Architecture - > x64

答案 11 :(得分:-1)

F10是Step Over ,F5继续到下一个断点,F11是Step Into,执行下一行代码然后等待。这就是你可能正在寻找的东西。

答案 12 :(得分:-1)

我刚遇到同样的问题,并且没有运气就完成了上述所有建议。过去在过去的某个时刻发现有人将方法签名改为“私有”时必须是“静态”或“公共”。一旦我将测试方法的签名更改回“公共”,断点就会重新开始工作。