我在程序的主入口点里面写如下代码
try
{
dosomething();
}
catch(Exception ex)
{
logException(ex);
}因为dosomething调用了几个类库,而这些类库可能抛出类库中未处理的Exception。按我的理解,这些类库中抛出的Exception应该到达主入口点的catch块、并且进行相应处理。
以debug模式启动运行时,情况确实如此。但如果不调试直接执行(debug版本程序),则上述的Exception抛出时,程序弹出对话框,说程序中出现unhandled exception(带有details、continue、quit按钮的那个),这个Exception不会被主入口点的catch块捕获到。程序行为超出了我的预想,不知道该如何解决。
try
{
dosomething();
}
catch(Exception ex)
{
logException(ex);
}因为dosomething调用了几个类库,而这些类库可能抛出类库中未处理的Exception。按我的理解,这些类库中抛出的Exception应该到达主入口点的catch块、并且进行相应处理。
以debug模式启动运行时,情况确实如此。但如果不调试直接执行(debug版本程序),则上述的Exception抛出时,程序弹出对话框,说程序中出现unhandled exception(带有details、continue、quit按钮的那个),这个Exception不会被主入口点的catch块捕获到。程序行为超出了我的预想,不知道该如何解决。
那几个类有没有TRY.....学习~~
——————————————————————————直接产生Exception的代码处并没有写try,但我觉得不应该是这个原因
因为在debug时exception确实按函数调用堆栈逐层向上传递、一直传递到主入口点被catch块捕获了
main ()
{
try
{
dosomething();
}
catch(Exception ex)
{
logException(ex);
}
}void dosomething()
{
aClass a = new aClass;
while(condition)
{
a.dosth();
foo();
}
}______________________________aLib.dll :Class aClass
{
public void dosth()
{
throw new Exception();
}
}程序编译为debug版本
在debug模式下运行,则dosth中抛出的异常传递到了main中的catch块
而直接运行,则在dosth抛出异常时,程序弹出上述的对话框,而不是被main中的catch块捕获。
AppDomain.UnhandledException
Application.ThreadException
可以帮助你
至于为啥start without debugging下发生异常而dubug下没有,我猜是线程意外的问题,具体你可以参考exception的source和StackTrace属性 :)
Main捕捉不到异常很经常啊,线城意外,静态构造函数里抛出意外都会发生这个情况
AppDomain.UnhandledException
Application.ThreadException
可以帮助你
至于为啥start without debugging下发生异常而dubug下没有,我猜是线程意外的问题,具体你可以参考exception的source和StackTrace属性 :)——————————————————————————————————确实是线程意外的问题,虽然对其运行机制还不明白,但至少可以先解决问题了。谢谢~~