Дизассемблируйте .NET IL, чтобы найти сообщение об ошибке

Моя команда пытается найти, где возникает сообщение об ошибке в .NET службе Windows , которая инкапсулирует веб-службу, которая была создана Microsoft и находится на нашем серверы для поддержки используемых нами бизнес-продуктов. Microsoft лично сообщила нам, что полученная нами ошибка на самом деле является одной из их ошибок, однако они не могут определить, где и почему она возникает. Это критически важный бизнес-процесс, который причиняет много страданий нашей команде.

Эта ошибка возникает, насколько мы можем судить, случайным образом и не имеет общих черт, которые мы можем обнаружить, просмотрев трассировки стека. Последний вызов в трассировке стека - это вызов нашего метода, который пытается прочитать ответ службы, не давая нам подсказки, где и почему возникает ошибка при вызове метода службы. Служба Microsoft Windows не регистрирует никаких ошибок в средстве просмотра событий.

Мы хотели бы отследить, откуда эта ошибка, путем поиска строки с буквальным сообщением об ошибке, которое выдается. Если мы сможем идентифицировать вызов метода, вызывающий эту ошибку, мы можем быть на один шаг ближе к тому, чтобы сузить круг способов решения этой ошибки.

Хотя у нас нет доступа к исходному коду этой службы, мы, тем не менее, можем просмотреть IL с помощью дизассемблера IL (idlasm.exe). Я сделал дамп IL для некоторых сборок, но это не буквальные строки.

Можно ли найти буквальную строку в IL? Я предполагаю, что он закодирован - я просто недостаточно знаю о IL, чтобы определить, где искать или как идентифицировать строку в IL. Если оно не существует в виде буквальной строки с методом в IL и хранится в ресурсе, где еще можно найти сообщение об ошибке?

Трассировка стека с замененными именами приложений.

Raw Error:  There is insufficient memory to execute this function.
This can be caused by recursive function calls. Contact your system administrator.

at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)   
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Product.DoSomething() in c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\da35f853\f48bba34\App_WebReferences.jygjwt-a.0.cs:line 701
at Product.DoSomething() in E:\Sites\Example.com\App_Code\File.vb:line 1105
at ASP.shop_checkout_aspx.ProcessCheckout() in E:\Sites\Example.com\processcheckout.aspx:line 546

A несколько примечаний: во время этого сообщения об ошибке доступно много памяти, и когда эта ошибка возникает, каждый последующий вызов любого метода возвращает ту же ошибку. Оно исчезнет только после перезапуска служб Microsoft.

Мы сузили каждый вызов до служб, используемых на нашем сайте, но не можем воспроизвести это сообщение. Мы можем перегрузить службу в разработке примерно в 1000 раз больше трафика, чем в производственной среде, и вызвать исключение нехватки памяти (потребляя всю память), но не сообщение, в котором говорится: « Может быть вызвано рекурсивным вызовом функции ". Agian, которая, по утверждению Microsoft, является уникальной ошибкой, которую специально выдает их продукт.

Обновление

Нам удалось найти буквальное сообщение об ошибке в файле .etx , которое выглядит следующим образом:

//   ÚÄÄÄÄÄÄÄÄÄ¿
// ÚÄ´  STACK  ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
// ³ ÀÄÄÄÄÄÄÄÄÄÙ                                                              ³
// ³                                                                          ³
// ³  Stack Manager                                                           ³
// ³                                                                          ³
// ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
@1@15@0@
@2@1@0@
There is insufficient memory to execute this function.

This can be caused by recursive function calls that are used in the program. Contact your system administrator.
@2@END@0@

Я предполагаю, что @

Мы сократили количество обращений к службам, используемым нашим сайтом, но не можем воспроизвести это сообщение. Мы можем перегрузить службу в разработке примерно в 1000 раз больше трафика, чем в производственной среде, и вызвать исключение нехватки памяти (потребляя всю память), но не сообщение, в котором говорится: « Может быть вызвано рекурсивным вызовом функции ". Agian, которая, по утверждению Microsoft, является уникальной ошибкой, которую специально создает их продукт.

Обновление

Нам удалось найти буквальное сообщение об ошибке в файле .etx , которое выглядит следующим образом:

//   ÚÄÄÄÄÄÄÄÄÄ¿
// ÚÄ´  STACK  ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
// ³ ÀÄÄÄÄÄÄÄÄÄÙ                                                              ³
// ³                                                                          ³
// ³  Stack Manager                                                           ³
// ³                                                                          ³
// ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
@1@15@0@
@2@1@0@
There is insufficient memory to execute this function.

This can be caused by recursive function calls that are used in the program. Contact your system administrator.
@2@END@0@

Я предполагаю, что @

Мы сократили количество обращений к службам, используемым нашим сайтом, но не можем воспроизвести это сообщение. Мы можем перегрузить службу в разработке примерно в 1000 раз больше трафика, чем в производственной среде, и вызвать исключение нехватки памяти (потребляя всю память), но не сообщение, в котором говорится: « Может быть вызвано рекурсивным вызовом функции ". Agian, которая, по утверждению Microsoft, является уникальной ошибкой, которую специально создает их продукт.

Обновление

Нам удалось найти буквальное сообщение об ошибке в файле .etx , которое выглядит следующим образом:

//   ÚÄÄÄÄÄÄÄÄÄ¿
// ÚÄ´  STACK  ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
// ³ ÀÄÄÄÄÄÄÄÄÄÙ                                                              ³
// ³                                                                          ³
// ³  Stack Manager                                                           ³
// ³                                                                          ³
// ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
@1@15@0@
@2@1@0@
There is insufficient memory to execute this function.

This can be caused by recursive function calls that are used in the program. Contact your system administrator.
@2@END@0@

Я предполагаю, что @ Мы можем перегрузить службу в разработке примерно в 1000 раз больше трафика, чем в производственной среде, и вызвать исключение нехватки памяти (потребляя всю память), но не сообщение, в котором говорится: « Может быть вызвано рекурсивным вызовом функции ". Agian, которая, по утверждению Microsoft, является уникальной ошибкой, которую специально создает их продукт.

Обновление

Нам удалось найти буквальное сообщение об ошибке в файле .etx , которое выглядит следующим образом:

//   ÚÄÄÄÄÄÄÄÄÄ¿
// ÚÄ´  STACK  ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
// ³ ÀÄÄÄÄÄÄÄÄÄÙ                                                              ³
// ³                                                                          ³
// ³  Stack Manager                                                           ³
// ³                                                                          ³
// ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
@1@15@0@
@2@1@0@
There is insufficient memory to execute this function.

This can be caused by recursive function calls that are used in the program. Contact your system administrator.
@2@END@0@

Я предполагаю, что @ Мы можем перегрузить службу в разработке примерно в 1000 раз больше трафика, чем в производственной среде, и вызвать исключение нехватки памяти (потребляя всю память), но не сообщение, в котором говорится: « Может быть вызвано рекурсивным вызовом функции ". Agian, которая, по утверждению Microsoft, является уникальной ошибкой, которую специально выдает их продукт.

Обновление

Нам удалось найти буквальное сообщение об ошибке в файле .etx , которое выглядит следующим образом:

//   ÚÄÄÄÄÄÄÄÄÄ¿
// ÚÄ´  STACK  ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
// ³ ÀÄÄÄÄÄÄÄÄÄÙ                                                              ³
// ³                                                                          ³
// ³  Stack Manager                                                           ³
// ³                                                                          ³
// ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
@1@15@0@
@2@1@0@
There is insufficient memory to execute this function.

This can be caused by recursive function calls that are used in the program. Contact your system administrator.
@2@END@0@

Я предполагаю, что @1 @ 15 @ 0 @ , @ 2 @ 1 @ 0 @ и @ 2 @ END @ 0 @ - это своего рода ссылка, которую сборки используют для ссылки на эти строки. У кого-нибудь есть информация о том, как привязать их к одной из сборок, использующих эти строки? Пока что в дампе IL нет данных, соответствующих формату с символами @ .

7
задан George Johnston 22 December 2010 в 18:03
поделиться