如何才能不打破的异常?(How to NOT breaking on an exception?)

2019-10-17 23:26发布

我有这样的事情:

try
{
    instance.SometimesThrowAnUnavoidableException(); // Visual Studio pauses the execution here due to the CustomException and I want to prevent that.
}
catch (CustomException exc)
{
    // Handle an exception and go on.
}

anotherObject.AlsoThrowsCustomException(); // Here I want VS to catch the CustomException.

在代码的另一部分我已经在那里CustomException被抛出的情况下,多个occurencies。 我想迫使Visual Studio来阻止打破instance.SometimesThrowAnUnavoidableException()行因为它掩盖了其他地方,我很感兴趣,打破CustomException的看法。

我试图DebuggerNonUserCode,但它是一个不同的目的。

如何从只在一定的方法捕捉特定的异常禁用的Visual Studio?

Answer 1:

您可以使用自定义代码来做到这一点的两个步骤。

  1. 禁用自动断CustomException例外。
  2. 添加的处理程序AppDomain.FirstChanceException事件到应用程序。 在处理程序,如果实际的例外是CustomException ,检查调用堆栈,看看,如果你真的想打破。
  3. 使用Debugger.Break(); 以导致Visual Studio停止。

下面是一些示例代码:

private void ListenForEvents()
{
    AppDomain.CurrentDomain.FirstChanceException += HandleFirstChanceException;
}

private void HandleFirstChanceException(object sender, FirstChanceExceptionEventArgs e)
{
    Exception ex = e.Exception as CustomException;
    if (ex == null)
        return;

    // option 1
    if (ex.TargetSite.Name == "SometimesThrowAnUnavoidableException")
        return;

    // option 2
    if (ex.StackTrace.Contains("SometimesThrowAnUnavoidableException"))
        return;

    // examine ex if you hit this line
    Debugger.Break();
}


Answer 2:

在Visual Studio中去调试- >异常,并关闭打破了你的CustomException通过取消选中相应的复选框,然后在代码中设置(可能在一个断点catch你真的想打破地方语句)。



Answer 3:

如果你想Visual Studio来阻止打破一个类型的所有异常,您必须配置从例外窗口的行为。

完整说明是在这里 ,但其要旨在于,进入Debug菜单,选择异常,然后取消选择你不想调试突破的项目。

我不认为有一种方法来避免使用这种技术的具体方法,但也许更好的问题是“这是为什么抛出异常?”

你可以添加一组#IF DEBUG预处理器指令来避免运行有问题的代码段。



Answer 4:

您可以禁用通过将完全步进DebuggerStepThrough属性的方法之前。 由于这将禁用整个方法步进,你可以在try-catch隔离到一个单独的一个用于调试的目的。

我没有测试,但它应该在的连接抛出异常甚至没有在该方法打破。 给它尝试;-)

另请参见本SO线程



Answer 5:

你不能简单的禁止从回采的Visual Studio中的代码的特定位置。 你只能阻止它停止时异常的特定类型的抛出,但会影响地方这样的异常,出现的所有地方。

其实你可以实现自定义解决方案所建议280Z28 。



文章来源: How to NOT breaking on an exception?