Необработанное исключение, вызвавшее сбой приложения с помощью "EventType clr20r3, P1 w3wp.exe" в журнале, но никаких подробностей нет

На рабочем сервере я вижу это событие из системного средства просмотра событий, когда приложение ASP.NET аварийно завершает работу:

EventType clr20r3, P1 w3wp.exe, P2 6.0.3790.3959, P3 45d691cc,
P4 app_web_default.aspx.cdcab7d2, P5 0.0.0.0, P6 4b2e4bf0, P7 4, P8 4, P9
system.dividebyzeroexception, P10 NIL. *

Он относится к категории ".NET Runtime 2.0 Error Reporting".

Но я не могу найти событие, относящееся к категории "ASP.NET 2.0.50727.0", которое может дать мне это исключение подробное представление, подобное этому:

An unhandled exception occurred and the process was terminated.  
Application ID: /LM/W3SVC/505951206/Root  
Process ID: 1112  
Exception: System.DivideByZeroException  
Message: Attempted to divide by zero.  
StackTrace:    
   at _Default.Foo(Object state)  
   at System.Threading.ExecutionContext.runTryCode(Object userData)  
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)  
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)  
   at System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)  
   at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)  
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp

У меня есть второе событие на моей машине dev, потому что Visual Studio там установлен? Если да, то как я могу отключить это, чтобы я мог эмулировать производственную среду?

Ответ 1

Иногда вы можете увидеть эту страшную ошибку в журнале событий Windows:

EventType clr20r3, P1 w3wp.exe, P2 6.0.3790.3959, P3 45d6968e, P4 dp.ui, P5 3.9.7.55, P6 4b49a307, P7 62e, P8 0, P9 system.stackoverflowexception, P10 NIL.

Как вы можете видеть, это неясно и не имеет трассировки стека, и вы не имеете представления о P1,..., P10 и любых числах. Вы знаете, какая из них самая худшая? единственное, что заставляет вас не спать и заставлять вас желать, если он не был в журнале, да! Сообщение "dp.ui".

Причина

ОК, помимо всех шуток и пожеланий, исключение "system.stackoverflowexception" возникает, когда происходит бесконечный цикл или вызов метода, поэтому вы должны проверять все источники для любого вызова рекурсивного метода, и вы можете запустить Visual Studi для отладки что. Но это невозможно и практически невозможно, даже если ваше приложение не является предприятием. Таким образом, вы должны использовать Google для P1,..., P10. Я сделал это вместо вас, так что просто расслабьтесь и расслабьтесь!

P1: имя приложения, которое произошло с этой ошибкой
P2: версия приложения
P3: отметка времени приложения
P4: имя сборки/модуля
P5: версия сборки/модуля
P6: метка времени сборки/модуля
P7: MethodDef
P8: IL offset
P9: имя исключения (хешировано, потому что имя слишком длинное)

Разрешение

Довольно очевидно, что нам нужно найти P7, P8. IL Disassembler, инструмент, включенный в Visual Studio, поможет нам в этом.

  • Выполните IL Disassembler и откройте свою библиотеку.
  • Меню: view → MetaInfo → Show!, обратите внимание на контрольный список меню, особенно на Raw.
  • Появится диалоговое окно, найдите комбинацию 06000 с 62e, и вы увидите имя метода класса и, посмотрев вверх, вы увидите первый TypeDef, объявляющий класс. И это все!

Когда вы заходите в приложение, вы можете увидеть рекурсивный вызов, и вы должны проверить условие, из-за которого этот цикл завершается!

В приложениях Windows и сервисах это исключение может понравиться следующим, и вы должны проверить "sib.infobase.workflow.services.exe" на "IL Disassembler":

EventType clr20r3, P1 sib.infobase.workflow.services, P2 1.0.2740.20114, P3 468a74f5, P4 sbpscs, P5 1.0.2740.20087, P6 468a74be, P7 1c, P8 120, P9 zxkyzcs5wacordmkttdkr1xouosi00fr, P10 NIL.

Если вы путешествуете в сети, вы можете увидеть решение, подобное тому, которое Microsoft подготовила:  http://support.microsoft.com/kb/911816, но он может работать неправильно для этого исключения.

Ссылки