当我有以下代码时:
public class Entry
{
public void Main()
{
var p = new Class1();
}
}
public class Class1
{
public Class1()
{
DoSomething();
}
private void DoSomething()
{
try
{
CallToMethodWhichThrowsAnyException()
}
catch (Exception ex)
{
throw new CustomException(ex.Message); // where CustomException is simple System.Exception inherited class
}
}
}
为什么我的CustomException不会被抛出并在Entry.Main或Class1的构造函数(或我的DoSomething方法)中停止执行调试?
即时窗口中只有消息A first chance exception of type 'MyLibrary.CustomException' occurred in MyLibrary.dll
。
设置Visual Studio的异常设置,仅在用户未处理时抛出所有CLR异常。
答案 0 :(得分:2)
第一次机会异常消息的含义正是它所说的First chance exception。
在您的情况下,它很可能意味着您已将调试器配置为不停止此类异常。由于这是自定义异常类型,因此这是默认行为。
要启用第一次机会中断,请转到Debug -> Exceptions
并选择希望调试器中断的异常类型。
答案 1 :(得分:0)
A first chance exception
表示某些方法引发了异常。现在你的代码有机会处理它。
似乎CallToMethodWhichThrowsAnyException
已经处理了从其中某处抛出的CustomException
,这就是为什么你没有抓住它。
此外,在重新抛出时,您应该包装原始异常,以便不会丢失堆栈跟踪信息:
catch (Exception ex)
{
throw new CustomException(ex.Message, ex); // notice the second argument
}