C# VS2012断点未被命中
我有一个类似这样的类:C# VS2012断点未被命中,c#,debugging,visual-studio-2012,visual-studio-debugging,C#,Debugging,Visual Studio 2012,Visual Studio Debugging,我有一个类似这样的类: public class MyService { private MyService(){} public static string GetStuff() { var stuffDid = new MyService(); return stuffDid.DoStuff(); } private string DoStuff() { //do stuff }
public class MyService
{
private MyService(){}
public static string GetStuff()
{
var stuffDid = new MyService();
return stuffDid.DoStuff();
}
private string DoStuff()
{
//do stuff
}
//other private helpers
}
显然我漏掉了很多,但这是通用的外壳
现在,我有一个单元测试:
[Test]
public void MyTest()
{
var results = MyService.GetStuff();
}
我在单元测试上设置了断点,我可以看到结果
中有数据。然而,我在MyService的MyService
上都设置了断点,除非我将断点放在大括号中,否则任何断点都不会被击中。我不明白,因为结果
有数据,我在MyService
中的return
语句应该会被点击,对吗
我错过什么了吗?我完全忘记了最基本的规则了吗?为什么MyService
中的任何内容都没有被命中?如果我用F11
手动进入它,它只会跳来跳去,甚至不会像我预期的那样遍历每一行。另外,当我手动执行时,我倾向于在我最初应该点击某些代码之后再点击它们。任何switch
语句似乎都默认为第一个选项,即使被切换的值应该清楚地输入不同的大小写
我甚至尝试过将MyService
constructorpublic
和去掉所有static
方法,但它仍然不起作用
我的测试和“核心”代码在同一个解决方案中,但项目不同(Test
和Core
)。其他测试在命中核心
中的断点时没有问题,只有在特定测试(唯一测试MyService
的测试)中才有问题
我已删除我的PDB文件并清理了解决方案。还是没什么。您需要使DoStuff为静态
private static string DoStuff()
{
//do stuff
}
只需确保已使用调试器符号构建程序集
此选项必须填写“完整”:
右键单击包含代码文件且断点未命中的项目。选择“属性”
打开项目属性后,选择“生成”选项卡。注意选项卡页面底部的“高级…”按钮。(在“输出”组内)
单击此按钮并为“调试信息”选择“完整”“财产。这应该是断点未被命中的原因。Visual studio使用保存在pdb文件中的符号查找断点的确切位置。如果未创建这些文件,则不会命中断点。可能是为了整理项目文件结构而禁用了这些文件的创建。在这种情况下,我意识到我需要这些文件。一些想法
确保它是调试版本,而不是发布版本
如果项目属性中的优化处于启用状态,请关闭它们
尝试在代码中插入Debugger.Break()
,而不是断点
在VS中
确保已启用断点(调试->窗口->断点工具栏),并且断点符号应为实心
执行您的应用程序加载调试->窗口->模块窗口。检查程序集以查看是否加载了符号。如果没有,它可能会给出相关的状态消息
你一直在调整你电脑上的日期吗?这真的会把构建过程搞砸。如果是这样,请手动删除所有obj/bin文件夹并重新编译。您的代码表示“服务”,它可以作为单独的进程运行。如果是这种情况,您可以加载程序集,因此断点将是实心的红色圆圈,但另一个在单独进程中运行的程序集副本实际上正在处理请求
- 检查任务管理器是否存在可能的违规者(可能托管您的服务的进程)。在调试以确认调用失败时杀死它们
- 尝试使用Debugger.Break()李>
- 在将输入进程和程序集名称加载到日志时,创建调试日志文件。确保您的日志每次都是不同的文件,以避免异步访问问题
这可能是因为您只调试了一个项目,而不是同时调试
测试和核心
您可以将VS设置为一次调试多个项目,方法是右键单击解决方案>属性>公共属性>启动项目
在这里您可以设置“多个启动项目”
只需将Core
和Test
设置为启动。这可能会解决你的问题。我最近也遇到同样的问题,头撞在墙上
答案是相当愚蠢的:不知何故,我的测试项目与主库项目不同步。我正在构建测试和库的调试版本,但是测试项目从bin/Release
文件夹复制了库。我刚刚重新创建了项目参考,一切都已修复
<> P.S.S.S.S.S.B.P.S.S.S.B.P.S.S.,甚至调试程序:调试器进入一个库函数,但是在中间部分跳过了一行。 < P>可以尝试添加<代码>线程。在代码< GetStuff > <代码>方法中使用休眠(5000)<代码>,并使用附加到进程
Visual Studio>工具>附加到进程并查看该行下方的断点是否被命中。如果它处于发布模式,请将其切换到调试模式。根据经验,我知道Visual Studio没有一种调试服务的明确方法,尤其是Windows服务。尝试向GetStuff添加一些代码以打印到文本文件中,这样至少可以知道代码正在被命中。在创建服务时,我经常使用这种方法进行测试。我遇到了类似的问题。事实证明,对于我来说,使用*.testrunconfig
文件从VS2010迁移到VS2012是一次糟糕的迁移。我删除了旧的,并设置了一个新的来解决这个问题。VS使用.pdb文件时的行为与您描述的完全相同(没有命中断点,命中了您在单步执行时不希望命中的代码),该文件是使用与调试时使用的代码不同的源代码生成的。我不能保证这是你的
Right mouse click your project
select [Properties]
select the [Build] tab
make sure [Define DEBUG constant] and [Define TRACE constant] are checked
Click the [Advanced] button at the bottom of the Build tabpage
Make sure that [Debug Info:] is set to [full]
Click [OK] and rebuild the project ;-)