- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们遇到了一个事件,我调用 Microsoft 支持,他们能够使用 WinDBG 分析我的一个小型转储并确定发生的确切问题。我 WinDBG 分析了同一个转储,但无法通过堆栈跟踪。我假设我无法找到金 block ,因为我无知,但微软不会告诉我他们自己做了什么来发掘它。我有机会在这里获得一些帮助吗?
情况涉及对供应商提供的 Web 服务的 .NET 1.1 调用。连续数周每晚 1 小时,我们无法针对该服务进行身份验证,但连接并未失败。在每次中断期间,我们都会挂起数十个线程,直到服务重新上线。
如果我调试诊断并报告,我可以看到线程 49 已挂起,然后针对该线程运行 !clrstack。
0:049> !clrstack<br/>
succeeded<br/>
Loaded Son of Strike data table version 5 from "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\mscorsvr.dll"<br/>
Thread 49<br/>
ESP EIP<br/>
1382ec64 7c82860c [FRAME: NDirectMethodFrameStandalone] [DEFAULT] I4 System.Net.UnsafeNclNativeMethods/OSSOCK.recv(I,I,I4,ValueClass System.Net.Sockets.SocketFlags)<br/>
1382ec78 10fb1fef [DEFAULT] [hasThis] I4 System.Net.Sockets.Socket.Receive(SZArray UI1,I4,I4,ValueClass System.Net.Sockets.SocketFlags)<br/>
1382ecb8 10fb1e65 [DEFAULT] [hasThis] I4 System.Net.Sockets.NetworkStream.Read(SZArray UI1,I4,I4)<br/>
1382ece4 10fb1dd1 [DEFAULT] [hasThis] I4 System.Net.TlsStream.ForceRead(SZArray UI1,I4,I4)<br/>
1382ed00 10fb1cc4 [DEFAULT] [hasThis] SZArray UI1 System.Net.TlsStream.ReadFullRecord(SZArray UI1,I4)<br/>
1382ed20 10a6f7df [DEFAULT] [hasThis] Class System.Exception System.Net.TlsStream.Handshake(Class System.Net.ProtocolToken)<br/>
1382ed44 10a6f59b [DEFAULT] [hasThis] Void System.Net.TlsStream..ctor(String,Class System.Net.Sockets.Socket,Boolean,Class System.Security.Cryptography.X509Certificates.X509CertificateCollection)<br/>
1382ed5c 10a6f4d0 [DEFAULT] [hasThis] ValueClass System.Net.WebExceptionStatus System.Net.Connection.ConstructTlsChannel(String,Class System.Net.HttpWebRequest,ByRef Class System.Net.Sockets.NetworkStream,Class System.Net.Sockets.Socket)<br/>
1382ed78 10a6f47b [DEFAULT] [hasThis] ValueClass System.Net.WebExceptionStatus System.Net.Connection.ConstructTransport(Class System.Net.Sockets.Socket,ByRef Class System.Net.Sockets.NetworkStream,Class System.Net.HttpWebRequest)<br/>
1382edac 10a693d7 [DEFAULT] [hasThis] Void System.Net.Connection.StartConnectionCallback(Object,Boolean)<br/>
1382f028 791b7f92 [FRAME: ContextTransitionFrame]
(!clrstack -p 对我不起作用。它返回与不要求参数完全相同的信息。我认为这是因为我没有代码的私有(private)符号。!do 对我也不起作用,虽然 !dumpobj 可以。我通过“.loadby sos mscorsvr”加载 sos,而不是 mscorwks,因为我在服务器上运行。我的 sos 加载是否有问题?)
无论如何,Microsoft 很友好地告诉我他们发现的部分内容。他们告诉我他们拉取的堆栈跟踪信息,我也拉取了同样的信息。 (这很酷。)不过,他们从堆栈跟踪中提取了以下信息。怎么办?
- So the above thread is waiting on a socket. The socket details are mentioned below<br/>
SOCKADDR @ 01285dc0<br/>
sin_family = 2 (IP)<br/>
sin_port = 443<br/>
sin_addr = 206.16.40.219
然后他们告诉我挂起的物体的名称,这样我就可以倾倒它,我做到了。
0:049> !dumpobj 0x09278dbc<br/>
Name: System.String<br/>
MethodTable 0x79b946b0<br/>
EEClass 0x79b949fc<br/>
Size 140(0x8c) bytes<br/>
mdToken: 0200000f (c:\windows\microsoft.net\framework\v1.1.4322\mscorlib.dll)<br/>
String: https://www.vendorname.com/services/v2006/Authentication
他们是如何从该堆栈跟踪中获得识别那些没有私有(private)符号的对象的?作为管理员,我不能只在 Debug模式下编译此代码,除非万不得已,否则我不会将调试代码部署到生产环境中。 Microsoft 拥有与我完全相同的信息,他们找到了答案,所以我认为如果我能克服无知的驼峰,就可以找到答案。
(针对每个回答,我补充说我的 WinDBG 符号搜索路径说: SRV*D:\Tools\Debuggers\Symbols*http://msdl.microsoft.com/download/symbols
谢谢。
最佳答案
我的猜测是他们转储了套接字对象以查看其内部字段。您可以使用 !dso 转储所有堆栈对象的地址,或使用 !dumpheap -type System.Net.Sockets.Socket 获取内存中的所有 Socket 对象。
了解对象的内部结构在这里很有帮助。鉴于 .NET 源代码,或 .NET Reflector 产生的反编译, 将有助于理解套接字对象的内部结构。
转储套接字对象将为您提供字段m_RemoteEndPoint
和m_RightEndPoint
的内存地址。其中一个可能给了他们 IP 地址、端口和系列。
关于没有符号的 WinDBG 转储分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1131873/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!