反汇编.NET IL以查找错误消息

Geo*_*ton 7 .net il

我的团队正在尝试查找.NET中出现错误消息的位置windows service,该服务封装了一个由Microsoft构建并驻留在我们的服务器上的Web服务,以支持我们使用的业务产品.微软亲自告诉我们,我们收到的错误实际上是他们的错误之一,但他们无法确定它发生的地点或原因.这是一个关键的业务流程,给我们的团队带来了很多心痛.

就我们所知,这个错误是随机发生的,并且没有我们可以通过查看堆栈跟踪发现的共同点.堆栈跟踪的最后一次调用是我们的方法调用,试图从服务中读取响应,没有提示我们在对服务的方法调用中发生错误的位置或原因.Microsoft Windows服务未将任何错误记录到事件查看器.

我们希望通过查找正在抛出的文字错误消息字符串来跟踪此错误的来源.如果我们可以识别生成此错误的方法调用,我们可以更接近于缩小如何解决此错误.

虽然我们无法访问此服务的源代码,但我们可以使用IL反汇编程序(idlasm.exe)查看IL.我已经为一些程序集转储了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
Run Code Online (Sandbox Code Playgroud)

一些附注是在此错误消息时有足够的内存可用,并且当发生此错误时,对任何方法的每次后续调用都会返回相同的错误.它只会通过重新启动Microsoft服务来平息.

我们缩小了对我们网站使用的服务的每一次调用,但无法重现此消息.我们可以在生产中使用大约1000倍的流量来重载开发中的服务,并导致内存不足异常(通过消耗所有内存),但不会Can be导致"由递归函数调用引起的"消息.微软声称的Agian是他们的产品特别抛出的一个独特错误.

更新

我们设法在.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@
Run Code Online (Sandbox Code Playgroud)

我假设@1@15@0@,@2@1@0@以及@2@END@0@有一些参考的组件用于引用这些字符串.有没有人有任何关于如何将这些信息绑定到使用这些字符串的程序集之一的信息?到目前为止,IL转储中似乎没有任何与格式匹配的数据@.

SK-*_*gic 0

同时,您可以简单地增加 IIS 工作线程 w3wp.exe 的堆栈大小(使用 editbin)。默认堆栈大小小得离谱。