Csharp/C#教程:在System.Type上使用条件断点时出错分享


在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博文的说明,我得到了一些工作。 说明归结为:

  1. 从“ 工具 ”菜单中打开“ 选项
  2. 在左侧选择“ 调试 ”,“ 常规
  3. 完全向下滚动以检查“ 使用托管兼容模式

这应该切换到传统的调试引擎,在我的情况下允许在断点条件的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

(0)
上一篇 2022年1月9日
下一篇 2022年1月9日

精彩推荐