防止输出窗口中的第一次机会异常
Posted
技术标签:
【中文标题】防止输出窗口中的第一次机会异常【英文标题】:Prevent first chance exceptions in Output windows 【发布时间】:2012-06-05 17:40:24 【问题描述】:在 Visual Studio 2010 中,是否可以防止首次机会异常写入输出窗口?我们有一个场景,有很多强制转换在设计上失败,并且输出窗口在调试时确实减慢了应用程序的速度。写出“System.InvalidCastException”类型的第一次机会异常发生......一遍又一遍只需要很长时间。 Visual Studio 中的控制台并不快 :
我知道不中断第一次机会异常的选项,但这似乎不会影响输出窗口。也没有把它放在让我们慢下来的领域之前:
Debug.Listeners.Clear()
关闭输出窗口也无济于事。不过它在发布模式下运行速度非常快。
感谢任何帮助!
【问题讨论】:
右键单击输出窗口并取消选中“异常消息”。这可以满足您的要求,但不会满足您的期望。只有as
运算符会这样做。
看来这里的问题是异常数量多于控制台输出速度。通过在强制转换之前检查类型可以防止无效强制转换异常。我真的很想知道为什么这是“设计使然”,以及您在尝试转换对象之前不只是检查类型的原因。
@Iridium - 感谢您的评论。你让我思考,我最终只使用了与 TryParse 相同的模式,但使用了 TryCast。我将在答案中发布相关代码。
【参考方案1】:
我可以为 Visual Studio 2013 回答这个问题:
在 VS 2013 中,您可以转到调试菜单 - 选项和设置... - 调试 - 输出窗口。 在“常规输出设置”下,您可以找到“异常消息”。把它关掉。
【讨论】:
【参考方案2】:根据@Iridium 的评论,我最终更改为 Try 模式并返回一个 bool 作为成功标志,而不是抛出 InvalidCastException。看起来很像这样:
if (!property.CanAssignValue(valueToSet))
Debug.Write(string.Format("The given value 0 could not be assigned to property 1.", value, property.Name));
return false;
property.SetValue(instance, valueToSet, null);
return true;
“CanAssignValue”变成了三个快速扩展:
public static bool CanAssignValue(this PropertyInfo p, object value)
return value == null ? p.IsNullable() : p.PropertyType.IsInstanceOfType(value);
public static bool IsNullable(this PropertyInfo p)
return p.PropertyType.IsNullable();
public static bool IsNullable(this Type t)
return !t.IsValueType || Nullable.GetUnderlyingType(t) != null;
谢谢!
【讨论】:
以上是关于防止输出窗口中的第一次机会异常的主要内容,如果未能解决你的问题,请参考以下文章
System.Xml.dll 中出现“System.Xml.XmlException”类型的第一次机会异常