Каковы причины и решения кода исключения c0000005 в mscorwks.dll?

Код исключения C0000005 генерируется из mscorwks.dll, когда приложение запускается в Windows Server 2008 R2, запущенном с использованием завершения теста. Другие платформы (Windows XP, Server 2003 R2, 32-разрядная и 64-разрядная версии Windows 7) не представляют этого исключения.

Журнал событий одного выполнения содержит многие из следующих событий с идентификатором 1023, инициированных средой выполнения .NET:

.NET Runtime версии 2.0.50727.4952 - Неустранимая ошибка механизма выполнения (7383851A) (80131506)

Само приложение использует интерфейс SOAP, созданный Visual Studio из WSDL файл, COM-объект со встроенным взаимодействием и нацелен на . NET 4.

sfc / scannow был запущен и не обнаружил проблем с системными файлами в уязвимой системе.

Какие действия по устранению неполадок можно предпринять, чтобы найти решение?


person Erick    schedule 28.12.2010    source источник


Ответы (4)


Неустранимая ошибка выполнения движка и нарушение прав доступа являются симптомами одной и той же проблемы. FEEE возникает, когда сборщик мусора .NET обнаруживает, что внутренняя структура кучи, собранной для сбора мусора, разрушена. Нарушение прав доступа - это аппаратное исключение, вызываемое процессором, когда он запрашивает доступ к памяти с недопустимым адресом. Распространенной причиной AV является повреждение кучи.

Подобные ошибки очень часто возникают из-за неуправляемого кода. Также довольно часто неуправляемый код имеет скрытые ошибки управления памятью, которые могут оставаться незамеченными в течение длительного времени. Тип ущерба, который может нанести ошибка, обычно бывает довольно случайным. Просто запустить его в другой операционной системе с другим шаблоном распределения памяти может быть достаточно, чтобы сработать бомбу.

У вас есть отличный кандидат на источник неприятностей. Вам нужно будет работать с поставщиком или автором COM-сервера, чтобы найти ошибку.

person Hans Passant    schedule 29.12.2010

0xC0000005 - это код исключения, содержащий ошибку Win32, что означает «Доступ запрещен». Учитывая, что вы используете COM-взаимодействие и получаете исключение ExecutionEngineException (в COM, COR_E_EXECUTIONENGINE; 0x80131506), я предполагаю, что либо это указатель NULL в компоненте COM, либо ошибочная директива ComImport в вашем . NET код.

person codekaizen    schedule 28.12.2010
comment
Коды исключений не являются кодами ошибок win32, а значения HRESULT не являются NTSTATUS. Извините мою любимую мозоль. - person Logan Capaldo; 29.12.2010
comment
Я знал, что кто-то это вызовет. Хорошо, хорошо, 0xC0000005 - это ошибка Win32. Соответствующий HRESULT - 0x80070005. - person codekaizen; 29.12.2010
comment
Это не ошибка win32. Это код исключения. Подайте 0xC0000005, например, в FormatMessage, и вы не получите полезного результата. - person Logan Capaldo; 29.12.2010
comment
Снова поймали. Однако я изменил его перед вашим комментарием. Более того, это ошибка Win32, просто заключенная в форму SEH (во многом как HRESULT). - person codekaizen; 29.12.2010
comment
Это проблема com-взаимодействия, но не из-за самого компонента. На самом деле это проблема, вызванная используемым продуктом тестовой оснастки, тест завершен 7, который получает небольшое зацепление и приводит к сбою сборки мусора. Я дам более краткий ответ для тех, кто столкнется с той же проблемой при использовании продукта, но спасибо за помощь, которая привела меня на правильный путь. - person Erick; 29.12.2010

Эта ошибка вызвана недостатками в способе взаимодействия TestComplete 7 с кучей в смешанных управляемых / неуправляемых приложениях. Вместо использования метода TestedApp.Run с использованием следующего блока кода, измененного для вашего выбора языка сценариев, представленного в VBScript < / а>:

Dim oScript, command
Set oScript = CreateObject("WScript.Shell")

command = "%comspec% /c " & PATH_TO_EXE & " " & Args
oScript.Run command, 10, True 

Соответствующая статья MSDN - Метод запуска (хост сценариев Windows).

person Erick    schedule 29.12.2010

TestComplete 7 (включая последнее обновление 7.52) поддерживает .NET Framework 4 только до версии .NET 4 Beta 2. Он не поддерживает окончательную версию Framework, поэтому это может быть причиной проблемы.

Попробуйте создать приложение, ориентированное на .NET 2.0. Это должно решить проблему.

Для тестирования приложений .NET 4 вам потребуется TestComplete 8.

person Alex    schedule 30.12.2010
comment
Нам известно об ограничениях поддержки .Net в TestComplete 7. В настоящее время мы находимся в процессе перехода на TestComplete 8, но описанное выше является решением проблем совместимости .Net 4. - person Erick; 30.12.2010