如何从c#中的本机dll中捕获c0000005异常

时间:2011-08-11 17:09:54

标签: c# c++ native-code

我正在使用本地dll,某个地方会抛出c0000005异常(访问冲突)并最终崩溃我的Web服务,直到该服务被回收。有没有办法捕捉异常?

3 个答案:

答案 0 :(得分:3)

您可以使用Microsoft SEH exception handler捕获异常,但实际上您应该解决任何错误。

干杯&第h。,

答案 1 :(得分:3)

我同意其他人...修复问题,但有时你会继承代码,而你只是想在生产中发现意外的违规行为。

在.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];

答案 2 :(得分:2)

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

0xc0000005STATUS_ACCESS_VIOLATION的NT错误代码。这意味着你的程序引用了一个糟糕的指针。非常简单地说这意味着你的程序剧烈崩溃并且试图恢复是错误的。

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