Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有方法在抛出CLR异常时触发事件_C#_.net_Exception_Visual Studio 2012_Logging - Fatal编程技术网

C# 是否有方法在抛出CLR异常时触发事件

C# 是否有方法在抛出CLR异常时触发事件,c#,.net,exception,visual-studio-2012,logging,C#,.net,Exception,Visual Studio 2012,Logging,我被要求将错误日志添加到一个每当抛出异常时都会记录的应用程序中 我有一个执行日志的方法,我可以在每个Catch子句中调用它 这似乎很愚蠢,因为应用程序中有数百条try-catch语句 在VisualStudio中,您可以将IDE设置为在每次异常后中断,而不考虑try捕获,因此我想知道是否可以使用这种功能(尽管在抛出代码时不会中断代码) 总括而言,我的问题是: 是否有方法在抛出自定义或CLR异常时触发调用此方法的事件(或类似事件)。 作为一个与此相关的额外问题,是否可以对方法进入/退出日志进行类似

我被要求将错误日志添加到一个每当抛出异常时都会记录的应用程序中

我有一个执行日志的方法,我可以在每个Catch子句中调用它

这似乎很愚蠢,因为应用程序中有数百条try-catch语句

在VisualStudio中,您可以将IDE设置为在每次异常后中断,而不考虑try捕获,因此我想知道是否可以使用这种功能(尽管在抛出代码时不会中断代码)

总括而言,我的问题是:

是否有方法在抛出自定义或CLR异常时触发调用此方法的事件(或类似事件)。

作为一个与此相关的额外问题,是否可以对方法进入/退出日志进行类似的操作

C# .Net 4.5
VS 2012

如果您希望调用函数,就像Visual Studio在第一次机会异常时中断一样(即使在try-catch块中也会在抛出时中断),那么您需要订阅正在运行的
AppDomain
中的事件

AppDomain.CurrentDomain.FirstChanceException += YourLoggingFunction;
您需要为程序中的每个
AppDomain
执行此操作,但除非您执行非常见任务,否则99%的程序可能只有一个
AppDomain

有关订阅其他AppDomain(如果正在使用)的更多信息,请参阅

请注意,您可能会遇到比您意识到的更多的异常,一些.NET framework代码会在内部抛出异常,并将代码放在try-catch块中,因此它永远不会出现在表面1上,或者如果库代码具有这种模式

try
{
    SomeFunctionThatThrows()
}
catch (Exception innerException)
{
    throw new SomeMoreDetailedException(message, stateDetails, innerException);
}
订阅该事件将使您开始看到从
SomeFunctionThatThrows()
和从
throw new SomeMoreDetailedException(
2)引发的异常


1:这在基于网络的I/O调用中最为常见,在基于网络的I/O调用中,像
TimeoutException
这样的异常很常见,但最终用户确实需要知道发生了超时错误,因为在通知用户之前可能会发生内部重试逻辑等情况。

2:通过禁用“”并中断所有抛出的异常,您也可以在Visual Studio中看到它们。

“我被要求将错误日志添加到每当抛出异常时都会记录的应用程序中。”
显然,请求此操作的人不知道他们在问什么。@JonathonReinhart:我猜应用程序有时会在生产过程中崩溃,他们不知道原因。希望他们真的打算记录未处理的异常。您真的想在每次抛出异常时触发事件,还是希望在发生异常时触发事件有未处理的异常?强调“未处理”