1

我有这样的事情:

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的情况。我想强制 Visual Studio 停止在instance.SometimesThrowAnUnavoidableException()行上中断,因为它掩盖了我有兴趣在CustomException上中断的其他地方的视图。

我尝试了DebuggerNonUserCode但它用于不同的目的。

如何禁用 Visual Studio 仅以某种方法捕获特定异常?

4

5 回答 5

2

您可以使用自定义代码分两步执行此操作。

  1. CustomException禁用异常的自动中断。
  2. 将事件的处理程序添加AppDomain.FirstChanceException到您的应用程序。在处理程序中,如果实际异常是 a 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();
}
于 2013-07-30T12:32:58.847 回答
1

在 Visual Studio 中,转到 debug->exceptions 并通过取消选中相应的复选框来为您关闭中断CustomException,然后在代码中(可能在catch语句上)在您实际要中断的位置设置断点。

于 2013-04-05T12:12:17.483 回答
0

如果您希望 Visual Studio 停止中断某个类型的所有异常,则必须从“异常”窗口配置行为。

完整的说明在这里,但要点是转到调试菜单并选择异常,然后取消选中您不希望调试器中断的项目。

我认为没有办法避免使用这种技术的特定方法,但也许更好的问题是“为什么会抛出异常?”

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

于 2013-04-05T12:11:55.503 回答
0

您可以通过在方法之前放置DebuggerStepThrough 属性来完全禁用单步执行。由于这会禁用整个方法中的单步执行,因此您可以将 try-catch 隔离为一个单独的用于调试目的。

我没有测试,但是当抛出异常时,它甚至不应该中断该方法。试试看;-)

另请参阅此 SO 线程

于 2013-04-05T12:17:21.393 回答
0

您不能简单地禁止 Visual Studio 停止在特定的代码位置。您只能在引发特定类型的异常时阻止它停止,但这会影响发生此类异常的所有地方。

实际上,您可以按照280Z28的建议实施自定义解决方案

于 2013-07-30T12:10:34.410 回答