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方法,但它仍然无法工作.
编辑:我的测试和'核心'代码在同一个解决方案中,但不同的项目(Test和Core分别).其他测试没有遇到突破点的问题Core,只有特定测试(测试的唯一测试)MyService.
编辑2:
我删除了我的PDB文件并清理了解决方案.依然没有.
Ala*_*lan 61
一些想法.
Debugger.Break()在VS中插入代码而不是断点您是否一直在计算机上调整日期?这真的搞砸了构建过程.如果是这样,请手动删除所有obj/bin文件夹并重新编译.
sa_*_*213 11
这可能是怎么一回事,因为你只调试1个项目不能同时Test和Core
你可以设置VS一次调试多个项目,你可以这样做 right-click your solution > Properties > Common Properties > StartUp Project
在这里你可以设置"多个启动项目"

只需设置两个Core并Test开始.这可以解决您的问题.
我有一个非常具体的场景,导致明显的问题是"断点没有被击中".
由于这里没有其他答案提及它,我将添加我的机会,它将帮助有同样问题的人.
在我的情况下,解决方案是愚蠢的,并且使用尽可能多的LINQ,我应该尽早解决这个问题.当运行返回IEnumerable的方法时,其中包含的return语句实际上是yield return语句,那么在调用它时不会执行该方法.
它实际上是在从IEnumerable对象调用另一个方法时执行的,例如ToList()或Count().只有这样才能执行该方法并达到断点.
| 归档时间: |
|
| 查看次数: |
49052 次 |
| 最近记录: |