防止输出窗口中的第一次机会异常

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;

谢谢!

【讨论】:

以上是关于防止输出窗口中的第一次机会异常的主要内容,如果未能解决你的问题,请参考以下文章

发生了第一次机会异常......我不知道为啥

如何在 Socket 上调试这个第一次机会异常?

标准 win32 wndproc 中的第一次机会异常

System.Xml.dll 中出现“System.Xml.XmlException”类型的第一次机会异常

在即时窗口中显示异常信息和 Debug.Print() 消息

我的代码中的第一次机会异常[关闭]