![](/img/trans.png)
[英]How do I find out what originally caused an exception, if it gets thrown from Microsoft's code?
[英]How do I find the exception type of an exception that gets thrown in C#?
我使用的图书馆似乎没有记载例外情况。 该库用于与公司生产的产品进行通信。 我希望能够区分抛出的异常,但是我不知道异常的名称(例如,在通信超时或欠压情况之间)。
他们所有的示例仅使用catch(Exception ex)
。 我怎样才能找到捕获单个错误所需的内容? 当我执行ex.toString()
,会得到如下信息:
System.Exception: Timeout
at CMLCOMLib.EcatObj.Initialize()
at copley_cmo_test.MainWindow.btnConnect_Click(Object sender, RoutedEventArgs e)
in c:\Users\adam.siembida\Desktop\copley_cmo_test\copley_cmo_test\MainWindow.xaml.cs:line 41
这个:
System.Exception: Timeout
表明他们只是抛出一个空的System.Exception
,例如
if (weHaveNoApiDesignSkills)
{
throw new Exception("Timeout");
}
可能有一些例外情况设计得更好,但您所展示的例外情况并不乐观:(
不幸的是,除非您开始在异常中使用消息来区分它们(这几乎总是一个坏主意),否则您将陷入困境。 也许值得图书馆的作者问一下,他们是否可以改善将来的发行版。
用ex.GetType()
例如catch(Exception ex)
捕获它,然后检查ex.GetType()
返回的Type
。 如果等于typeof(Exception)
,则意味着它们没有抛出比Exception
更具体的东西。
顺便说一句,如果在捕获到异常时(即在catch块中)停止了您的操作,则在监视窗口中输入$exception
时,您将看到整个异常。
如果未正确记录正在使用的库中的API,则应捕获基本异常并不仅将消息记录下来,还应将异常转换为字符串,从而记录整个异常。 例如。
try
{
//api call which throws exception.
}
catch(Exception ex)
{
//log ex.ToString();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.