Как я могу поймать C0000005 исключение из родной DLL в C # - PullRequest
2 голосов
/ 11 августа 2011

Я работаю с собственной dll, которая где-то генерирует исключение c0000005 (нарушение прав доступа) и приводит к сбою моего веб-сервиса до тех пор, пока сервис не будет переработан.Есть ли способ поймать исключение?

Ответы [ 3 ]

3 голосов
/ 13 июля 2012

Я согласен с остальными ... Исправьте проблему, но иногда вы наследуете код и просто хотите обнаружить неожиданное нарушение в работе.

В .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];
3 голосов
/ 11 августа 2011

вы можете поймать исключение, используя Microsoft SEH обработчик исключений , но на самом деле вы должны исправить все, что не так.

2 голосов
/ 11 августа 2011

Не поймите это.Исправьте ошибку.

0xc0000005 - это код ошибки NT для STATUS_ACCESS_VIOLATION.Это означает, что ваша программа неправильно разыграла указатель.Проще говоря, это означает, что ваша программа сильно рухнула, а попытка восстановления ошибочна.

Я знаю, вы говорите, что это сторонняя DLL, но по крайней мере вы должны отладить и понять проблему.Это может быть что-то простое, например, вы передаете DLL какой-то неверный ввод или неправильно инициализируете его.Если вы не можете этого сделать, вы можете связаться с авторами библиотеки DLL или рассмотреть возможность устранения зависимости от них.

...