我有这样的事情:
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仅以某种方法捕获特定异常?
答案 0 :(得分:2)
您可以使用自定义代码分两步完成此操作。
CustomException
例外的自动中断。AppDomain.FirstChanceException
事件的处理程序。在处理程序中,如果实际异常是CustomException
,请检查调用堆栈以查看是否确实要中断。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();
}
答案 1 :(得分:1)
在Visual Studio中,通过取消选中相应的复选框,转到debug-> exception并关闭CustomException
的中断,然后在代码中设置断点(可能在catch
语句中)你真正想要打破的地方。
答案 2 :(得分:0)
如果希望Visual Studio停止中断类型的所有异常,则必须从“例外”窗口配置行为。
完整说明是here,但要点是转到“调试”菜单并选择例外,然后取消选中您不希望调试器中断的项目。
我认为没有办法避免使用这种技术的特定方法,但也许更好的问题是“为什么这会抛出异常?”
您可以添加一组#IF DEBUG预处理器指令,以避免运行有问题的代码段。
答案 3 :(得分:0)
您可以通过在方法之前放置DebuggerStepThrough Attribute来完全禁用步进。 由于这会禁用整个方法中的步进,因此您可以将try-catch分离为单独的一个用于调试目的。
我没有测试,但是当抛出异常时它甚至不应该破坏该方法。尝试一下; - )
答案 4 :(得分:0)
您不能简单地禁止Visual Studio停止在特定的代码位置。您只能在抛出特定类型的异常时阻止它停止,但这会影响发生此类异常的所有位置。
实际上,您可以按照custom solution的建议实施280Z28。