3

我正在使用一个本机 dll,该 dll 在某处引发 c0000005 异常(访问冲突)并最终导致我的 Web 服务崩溃,直到服务被回收。有没有办法捕捉异常?

4

3 回答 3

4

我同意其他人的观点...修复问题,但有时您继承代码并且只想在生产中发现意外违规。

在 .net 4+ 中,您可以添加 HandleProcessCorruptedStateExceptions 属性,它将作为您可以捕获的异常出现。调用堆栈不是非常有用,但总比没有好。

C#

[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]
public void SomeCSharpMethod()
try
{
  // call managed code
}
catch (Exception ex)
{
  Console.WriteLine("Exception");
}

C++

vector<int> myValues;
int a = myValues[1];
于 2012-07-13T12:58:38.793 回答
3

您可以使用 Microsoft SEH 异常处理程序捕获异常,但实际上您应该修复任何错误。

干杯&hth.,

于 2011-08-11T17:12:43.723 回答
2

不要抓住这个。修复错误。

0xc0000005是 NT 的错误代码STATUS_ACCESS_VIOLATION。这意味着您的程序进行了错误的指针取消引用。简而言之,这意味着您的程序剧烈崩溃并试图恢复是错误的。

我知道你说它是第 3 方 DLL,但至少你应该调试并理解这个问题。这可能很简单,例如您向 DLL 传递了一些错误的输入或未正确初始化它。如果您不能这样做,您可以联系 DLL 的作者或考虑消除对他们的依赖。

于 2011-08-11T17:40:01.493 回答