在System.Type上使用条件断点时出错
这是function:
public void Init(System.Type Type) { this.Type = Type; BuildFieldAttributes(); BuildDataColumns(FieldAttributes); }
我在第一行设置了一个断点( this.Type = Type
),我想在Type.FullName == "Malt.Organisation"
时Type.FullName == "Malt.Organisation"
,这就是我输入的条件。
但是,当命中该行时会显示以下错误:
断点的条件无法执行。 条件是’Type.FullName ==“Malt.Organisation”’。 返回的错误是’在此上下文中不支持在System.Type类型的调试对象中检查对象的状态。’
我做错了什么(显而易见的)?
PS。 解决方法是将其添加到代码中:
if (Type.FullName == "Malt.Organisation") System.Diagnostics.Debugger.Break();
在我的情况下,我使用Visual Studio 2013,NUnit 2.6.4,并将调试器附加到unit testing会话,我收到了类似的消息:
断点的条件无法执行。 条件是’type.Name.Contains(“FooBar”)’。 返回的错误是’在此上下文中不支持在System.Type类型的调试对象中检查对象的状态。’。 单击“确定”以停止此断点。
这是由微软推出的新调试引擎中缺少的function引起的。 按照这个msdn博文的说明,我得到了一些工作。 说明归结为:
- 从“ 工具 ”菜单中打开“ 选项 ”
- 在左侧选择“ 调试 ”,“ 常规 ”
- 完全向下滚动以检查“ 使用托管兼容模式 ”
这应该切换到传统的调试引擎,在我的情况下允许在断点条件的Type上使用表达式。 请注意,显然您需要重新启动应用程序或调试会话。
免责声明:我不知道检查此选项有哪些其他效果。 就个人而言,当我完成需要它的任务时,我把它关掉了……
你说Type.FullName == "Malt.Organisation"
导致它破坏,你试过this.Type.FullName == "Malt.Organisation"
吗? this.Type.FullName == "Malt.Organisation"
?
另一种可能性,调试器是否认为您正在尝试使用名为Type的变量调用静态方法,如同其类名一样? 是否将Type变量重命名为其他东西来修复它?
我遇到了这个但是在Web应用程序中测试IsInterface时。 我只是作弊而不是在调试器中启用额外的function。
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应用程序中的一个选项。
我不确定这里描述的“使用托管兼容模式”解决方案 – 对我没有帮助,但在我自己的情况下, Project > Properties > Debug > Enable Native code debugging
– 必须取消选中。
为什么 – 目前没有线索。
使用.net 4.5,vs2015,控制台应用程序。
上述就是C#学习教程:在System.Type上使用条件断点时出错分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1026386.html