VS2012断点没有被击中

RJP*_*RJP 40 c# debugging visual-studio-debugging visual-studio-2012

我有一个看起来像这样的课程:

public class MyService
{
    private MyService(){}
    public static string GetStuff()
    {
        var stuffDid = new MyService();
        return stuffDid.DoStuff();
    }
    private string DoStuff()
    {
        //do stuff
    }
    //other private helpers

}
Run Code Online (Sandbox Code Playgroud)

显然我离开了很多,但那是一般的外壳.

现在,我有一个单元测试:

[Test]
public void MyTest()
{

    var results = MyService.GetStuff();
}
Run Code Online (Sandbox Code Playgroud)

我在单元测试中设置了断点,我可以看到它results有数据.但是,我完全设置了断点MyService,除非我把它们放在花括号上,否则什么都不会被击中.哪些我无法理解,因为results有数据,我的return陈述MyService应该被击中,对吧?

我错过了什么吗?我完全忘记了最基本的规则吗?怎么没有MyService被击中?如果我手动插入它F11,它只是跳来跳去,甚至没有像我期望的那样通过每一行.此外,当我通过手动步进时,我倾向于在我应该最初击中它之后击中某些代码.并且任何switch语句似乎默认为第一个选项,即使切换的值应该明确输入不同的case.

我甚至试过制作MyService构造函数public并取消所有static方法,但它仍然无法工作.

编辑:我的测试和'核心'代码在同一个解决方案中,但不同的项目(TestCore分别).其他测试没有遇到突破点的问题Core,只有特定测试(测试的唯一测试)MyService.

编辑2:

我删除了我的PDB文件并清理了解决方案.依然没有.

Ala*_*lan 61

一些想法.

  1. 确保它是一个调试版本而不是发布版本
  2. 如果项目属性处于启用状态,请关闭项目属性中的优化
  3. 尝试Debugger.Break()在VS中插入代码而不是断点
  4. 确保断点已启用(Debug-> Windows-> Breakpoints工具栏),断点符号应为实线
  5. 执行你的申请.加载Debug-> Window-> Modules窗口.检查装配以查看是否加载了符号.如果没有,它可能会给出相关的状态消息.

您是否一直在计算机上调整日期?这真的搞砸了构建过程.如果是这样,请手动删除所有obj/bin文件夹并重新编译.

  • +1"确保它是一个调试版本" - 哎呀! (9认同)
  • 在弄乱系统日期后删除`/ obj`对我有用 - 谢谢! (2认同)

sa_*_*213 11

这可能是怎么一回事,因为你只调试1个项目不能同时TestCore

你可以设置VS一次调试多个项目,你可以这样做 right-click your solution > Properties > Common Properties > StartUp Project

在这里你可以设置"多个启动项目" 在此输入图像描述

只需设置两个CoreTest开始.这可以解决您的问题.


RJP*_*RJP 9

事实证明,这与代码覆盖率有关.

关闭它修复了问题.

您可以通过以下链接了解如何禁用代码覆盖率

禁用代码覆盖率

  • 这不是一个真正的答案.您应该描述如何关闭代码覆盖率. (27认同)

nuz*_*ilo 5

我有一个非常具体的场景,导致明显的问题是"断点没有被击中".

由于这里没有其他答案提及它,我将添加我的机会,它将帮助有同样问题的人.

在我的情况下,解决方案是愚蠢的,并且使用尽可能多的LINQ,我应该尽早解决这个问题.当运行返回IEnumerable的方法时,其中包含的return语句实际上是yield return语句,那么在调用它时不会执行该方法.

它实际上是在从IEnumerable对象调用另一个方法时执行的,例如ToList()Count().只有这样才能执行该方法并达到断点.