这是功能:
public void Init(System.Type Type) {
this.Type = Type;
BuildFieldAttributes();
BuildDataColumns(FieldAttributes);
}
我在第一行(this.Type = Type
)设置了断点,我希望在Type.FullName == "Malt.Organisation"
时断开,这就是我输入的条件。
然而,当命中该行时会显示以下错误:
断点的条件无法执行。条件是 'Type.FullName ==“Malt.Organisation”'。返回的错误是 '检查System.Type类型的调试对象中的对象的状态 在此上下文中不受支持。'
我做错了什么(明显的)?
PS。解决方法是将其添加到代码中:
if (Type.FullName == "Malt.Organisation") System.Diagnostics.Debugger.Break();
答案 0 :(得分:49)
在我的情况下,我使用Visual Studio 2013,NUnit 2.6.4,并将调试器附加到单元测试会话,我收到了类似的消息:
断点的条件无法执行。条件是'type.Name.Contains(“FooBar”)'。返回的错误是'在此上下文中不支持在System.Type类型的调试对象中检查对象的状态。'。单击“确定”以停止此断点。
这显然是由微软推出的新调试引擎中缺少的功能引起的。按照this msdn blogpost的说明,我得到了一些工作。说明归结为:
这应该切换到遗留调试引擎,在我的情况下允许在断点条件下输入表达式。请注意,您确实需要重新启动应用程序或调试会话。
免责声明:我不知道检查此选项的其他效果有哪些。就个人而言,当我完成了需要它的任务时,我把它关掉了......
答案 1 :(得分:4)
你说Type.FullName == "Malt.Organisation"
会导致它中断,你试过this.Type.FullName == "Malt.Organisation"
吗?
另一种可能性是,调试器是否认为您正在尝试使用名为Type的变量来调用静态方法?是否将Type变量重命名为其他东西?
答案 2 :(得分:3)
我遇到了这个但是在Web应用程序中测试IsInterface时。我没有在调试器中启用额外的功能,而是简单地作弊。
bool blnIsInterface = tType.IsInterface;
//Insert breakpoint here...
if(blnIsInterface)
{
...
}
所以在你的情况下,你可以做类似
的事情public void Init(System.Type Type) {
bool blnBreak = Type.FullName == "Malt.Organisation";
//insert breakpoint of blnBreak == true
this.Type = Type;
BuildFieldAttributes();
BuildDataColumns(FieldAttributes);
}
这有点麻烦,但至少你不必担心性能命中和启用本机代码调试似乎不是Web应用程序中的一个选项。
答案 3 :(得分:1)
我不确定"使用托管兼容模式"这里描述的解决方案 - 没有帮助我,但在我自己的情况下Project > Properties > Debug > Enable Native code debugging
- 必须取消选中。
为什么 - 目前没有线索。
正在使用.net 4.5,vs2015,控制台应用程序。