Я работаю с собственной dll, которая где-то выдает исключение c0000005 (нарушение доступа) и в конечном итоге приводит к сбою моей веб-службы, пока служба не будет переработана. Есть ли способ поймать исключение?
Как поймать исключение c0000005 из родной dll в С#
Ответы (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];
вы можете перехватить исключение, используя Microsoft обработчик исключений SEH, но на самом деле вы должны исправить все, что не так.
Ура и чт.,
Не лови это. Исправьте ошибку.
0xc0000005
— это код ошибки NT для STATUS_ACCESS_VIOLATION
. Это означает, что ваша программа неправильно разыменовала указатель. Проще говоря, это означает, что ваша программа сильно потерпела крах, и попытка восстановления была ошибочной.
Я знаю, вы говорите, что это сторонняя DLL, но, по крайней мере, вы должны отладить и понять проблему. Это может быть что-то простое, например, вы передаете DLL какой-то неверный ввод или неправильно инициализируете ее. Если вы не можете этого сделать, вы можете связаться с авторами DLL или рассмотреть вопрос об устранении вашей зависимости от них.