代码之家  ›  专栏  ›  技术社区  ›  My Other Me

Visual Studio调试器跳过断点

  •  14
  • My Other Me  · 技术社区  · 15 年前

    我的VisualStudio2008IDE在调试单元测试时表现得非常奇怪:我有一个断点,当我点击它,然后尝试使用F10时,测试结束。如果我在被测试的方法中的每一行上设置断点,我将得到一个随机断点,而不是下一行的断点。在干净的系统重新启动后,我已清理并重建了解决方案。这种行为持续存在。是否有其他人经历过这种情况并得出结论。

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

    13 回复  |  直到 15 年前
        1
  •  27
  •   Hans Passant    10 年前

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


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

        2
  •  9
  •   Toad    15 年前

    如果调试发布版本,就会发生这种行为(因为行被优化了)。

    过去,如果我在其他地方调试旧的exe(由项目配置设置),而不是最近生成的exe,我也会遇到这种情况;^)

        3
  •  4
  •   sinek    15 年前

    我在VS2003上也有类似的问题。结果证明我使用了错误的符号,所以它们无法绑定到正确的源代码。

    确保在以下情况下:

    1. 您正在使用调试构建(或任何类型的优化都已关闭)
    2. 生成输出路径正常(“项目属性\链接器\输出文件”与正在调试的exe匹配)
    3. 不在变量声明上放置断点: i、 e.如果在“int some_variable;”上放置断点,您永远不会点击它,而是会点击它之后的第一个位置,即定义\初始化某些内容或调用某些方法
    4. 不能使用F10(执行下一条语句)单步执行,但可以使用F11(执行下一条语句并跟随执行进入方法调用)

    p、 s.尝试放置DebugBreak();两种方法中的函数(除非此代码在某个循环中执行,因此这可能会令人沮丧)。这将导致在执行到达这些函数中的任何一个时终止进程(因此您可以从该特定位置继续调试)。

        4
  •  3
  •   Michael Baldry    15 年前

    当运行多个线程时,也会发生这种行为。

        5
  •  2
  •   jeroenh    15 年前

    即使在调试构建中,编译器优化也可以解释这种行为。在“项目属性”下的“生成”,确认复选框“优化代码”已关闭。我看到在从.NET1.1升级某些项目后,默认情况下会启用此功能。

        6
  •  2
  •   Mike Schenk    15 年前

    您是否将断点放在作为生成类的一部分的代码中?

    我在服务参考的客户端站点上遇到过此问题。生成的类是具有

        [System.Diagnostics.DebuggerStepThroughAttribute()]
    

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

        7
  •  0
  •   Jacob    15 年前

    这可能与测试框架不加载当前正在处理的相同程序集的情况一样简单。我在NUnit遇到过这种情况,这种情况很少见,它是通过测试程序集的副本来实现的;偶尔,它会停止复制最新版本。断点是否用“符号未加载”指示符修饰?

        8
  •  0
  •   Patrick    15 年前

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

        9
  •  0
  •   Rohit.Net    11 年前

    可能现在回复已经太晚了,我在VS2012中遇到了同样的问题,请检查菜单测试是否>测试设置>选中LocalTestRun.TestRunConfig”,如果选中,则取消选中它,它将停止跳过代码行。Vs2008也可能同样适用。

        10
  •  0
  •   Ben Osborne    10 年前

    我在VisualStudioCommunity 2013中遇到了这个问题。这种行为似乎是出于设计。运行测试时,执行不会在断点上停止。如果希望在断点上停止执行,请选择测试-->调试而不是测试-->跑

        11
  •  0
  •   ΩmegaMan    7 年前

    我的单元测试是在x86下进行的。将其更改为x64有效。

    Test -&燃气轮机; Test Settings Default Processor Architecture -&燃气轮机; x64

        12
  •  -1
  •   Arlen Beiler    15 年前

    F10是第一步 结束 ,F5是继续到下一个断点,F11是步进,它执行下一行代码,然后等待。这就是你可能正在寻找的。

        13
  •  -1
  •   Jeff    9 年前

    我只是遇到了同样的问题,并没有运气地浏览了上面所有的建议。在过去的某个时候,有人将方法签名更改为“private”,而它必须是“static”或“public”。当我把测试方法的签名改回“public”时,断点又开始工作了。