2014-09-03 81 views
0

使用使用第三方库我体验到有趣的情况。下面的代码打破上异常:为什么我无法捕捉到第三方库引发的异常?

var instance = new Class(arg); 

但是,当这条线被封闭在try/catch块,该异常没有抓到。

当然,只有当启用了给定异常类型的中断时,visual studio调试器才会停止异常。禁用时,异常消失(完全)。 catch块永远不会执行。如果使用catch (Exception exc) {}catch {},则无关紧要。例外源自Exception

这怎么可能?

+1

我认为你误解了“给定异常类型中断”的行为。这是调试器在处理异常时的功能。图书馆正在抓住并“处理”这个例外。你的catch块没有被击中,因为它已经被抓到了。如果你有图书馆的来源,你会在不同的地方突破。 – Adam47 2014-09-03 16:52:25

+0

这是第二次也是最后一次尝试分享我在Q&A风格中不得不思考的东西;)无论如何,在异常处理的时候你是对的,并且由于我反编译了库,它在我在答案中描述的方式。首先,对我来说看起来有点奇怪,所以我做出了一个结论,这只是“只调试”的例外。给定的类名为AForge.FilterInfoCollection并驻留在AForge.Video.DirectShow.dll中,如果您想查看(www.aforgenet.com)。也许制定和简化尝试似乎太愚蠢了,我又得到了一些反对票。 – sharpener 2014-09-03 17:07:13

+0

我不确定为什么有人投下了这个问题,但我猜测对答案的投票是来自某人被空的抓块阻止。不幸的是,我也发现了很多空的catch块,或者有一个像“// TODO:找出如何处理错误”的评论。你可能只是引起了情绪反应。我给它+1回到0. – Adam47 2014-09-03 19:20:08

回答

-1

我想这可能是常见的技巧或惯例,只有“只调试”异常。第三方库使用这样的代码:

public class Class 
{ 
    public Class(object arg) 
    { 
     try 
     { 
      ... 
      throw new Exception("message"); 
      ... 
     } 
     catch 
     { 
      // This is just empty. By purpose. 
     } 
     finally 
     { 
      ... 
     } 
    } 
} 

调试器,然后停在throw语句(如果配置为这样做),但作为例外“处理”,它不会传播任何其他地方...

+1

这并不常见。这是错误的代码。 – paqogomez 2014-09-03 16:51:22