我有这样的事情:
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?
您可以使用自定义代码来做到这一点的两个步骤。
- 禁用自动断
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();
}
在Visual Studio中去调试- >异常,并关闭打破了你的CustomException
通过取消选中相应的复选框,然后在代码中设置(可能在一个断点catch
你真的想打破地方语句)。
如果你想Visual Studio来阻止打破一个类型的所有异常,您必须配置从例外窗口的行为。
完整说明是在这里 ,但其要旨在于,进入Debug菜单,选择异常,然后取消选择你不想调试突破的项目。
我不认为有一种方法来避免使用这种技术的具体方法,但也许更好的问题是“这是为什么抛出异常?”
你可以添加一组#IF DEBUG预处理器指令来避免运行有问题的代码段。
您可以禁用通过将完全步进DebuggerStepThrough属性的方法之前。 由于这将禁用整个方法步进,你可以在try-catch隔离到一个单独的一个用于调试的目的。
我没有测试,但它应该在的连接抛出异常甚至没有在该方法打破。 给它尝试;-)
另请参见本SO线程
你不能简单的禁止从回采的Visual Studio中的代码的特定位置。 你只能阻止它停止时异常的特定类型的抛出,但会影响地方这样的异常,出现的所有地方。
其实你可以实现自定义解决方案所建议280Z28 。