gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:22:05 24 4
gpt4 key购买 nike

我的团队正在尝试查找 .NET windows 服务 中出现错误消息的位置,该服务封装了由 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

一些旁注是,出现此错误消息时有足够的可用内存,并且当发生此错误时,对任何方法的每个后续调用都会返回相同的错误。只有重新启动 Microsoft 服务才能缓解这种情况。

我们已经缩小了对我们网站使用的服务的每次调用范围,但无法重现此消息。我们可以使开发中的服务过载,流量约为生产中的 1000 倍,并导致内存不足异常(通过消耗所有内存),但不会出现“可以”的消息由递归函数调用引起。” 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@

我假设 @1@15@0@@2@1@0@@2@END@0@ code> 是程序集用来引用这些字符串的某种引用。有谁知道如何将它们绑定(bind)到使用这些字符串的程序集之一?到目前为止,IL 转储中似乎没有任何与 @ 符号的格式匹配的数据。

最佳答案

您很可能需要查看线路的另一端以查找异常的来源。别忘了,您正在使用肥皂。当 SoapMessage.Exception 属性不为 null 时,它会在 SoapHttpClientProtocol.ReadResponse() 中抛出。

异常文本暗示所谓的软堆栈溢出。 Windows异常代码0xe053534f(谷歌搜索得很好),当互操作代码发现没有足够的堆栈空间来运行函数而不导致硬堆栈溢出时抛出。

关于.net - 反汇编.NET IL以查找错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4510797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com