2

私がMicrosoftサポートに電話したところ、WinDBGを使用して私のミニダンプの1つを分析し、発生している正確な問題を特定することができたという事件が発生しました。WinDBGが同じダンプを分析し、スタックトレースを通過できませんでした。私は無知であるために黄金のナゲットを見つけることができないと思いますが、Microsoftは彼らがそれを自分で発掘するために何をしたかを教えてくれません。ここで難しい部分について助けを得ることができるチャンスはありますか?

この状況には、ベンダー提供のWebサービスへの.NET1.1呼び出しが含まれていました。1泊1時間、数週間、サービスに対して認証できませんでしたが、接続は失敗しませんでした。停止するたびに、サービスがオンラインに戻るまで数十のスレッドを停止しました。

DebugDiagとReportを実行すると、スレッド49がハングしていることがわかり、そのスレッドに対して!clrstackを実行します。

0:049> !clrstack
succeeded
Loaded Son of Strike data table version 5 from "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\mscorsvr.dll"
Thread 49
ESP EIP
1382ec64 7c82860c [FRAME: NDirectMethodFrameStandalone] [DEFAULT] I4 System.Net.UnsafeNclNativeMethods/OSSOCK.recv(I,I,I4,ValueClass System.Net.Sockets.SocketFlags)
1382ec78 10fb1fef [DEFAULT] [hasThis] I4 System.Net.Sockets.Socket.Receive(SZArray UI1,I4,I4,ValueClass System.Net.Sockets.SocketFlags)
1382ecb8 10fb1e65 [DEFAULT] [hasThis] I4 System.Net.Sockets.NetworkStream.Read(SZArray UI1,I4,I4)
1382ece4 10fb1dd1 [DEFAULT] [hasThis] I4 System.Net.TlsStream.ForceRead(SZArray UI1,I4,I4)
1382ed00 10fb1cc4 [DEFAULT] [hasThis] SZArray UI1 System.Net.TlsStream.ReadFullRecord(SZArray UI1,I4)
1382ed20 10a6f7df [DEFAULT] [hasThis] Class System.Exception System.Net.TlsStream.Handshake(Class System.Net.ProtocolToken)
1382ed44 10a6f59b [DEFAULT] [hasThis] Void System.Net.TlsStream..ctor(String,Class System.Net.Sockets.Socket,Boolean,Class System.Security.Cryptography.X509Certificates.X509CertificateCollection)
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)
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)
1382edac 10a693d7 [DEFAULT] [hasThis] Void System.Net.Connection.StartConnectionCallback(Object,Boolean)
1382f028 791b7f92 [FRAME: ContextTransitionFrame]

(!clrstack -pは私には機能しません。これは、パラメーターを要求しないのとまったく同じ情報を返します。これは、コードのプライベートシンボルがないためだと思います。!doも機能しません。 dumpobjは行います。サーバー上で実行しているため、mscorwksではなく「.loadbysos mscorsvr」を介してsosをロードしました。sosのロードが何らかの理由で間違っている可能性がありますか?)

とにかく、マイクロソフトは親切にも彼らが見つけたものの一部を教えてくれました。彼らは私に彼らが引っ張ったスタックトレースを教えてくれました、そして私は同じものを引っ張りました。(それはクールです。)しかし、スタックトレースから、彼らは次の情報を抽出しました。どのように?

- So the above thread is waiting on a socket. The socket details are mentioned below
SOCKADDR @ 01285dc0
sin_family = 2 (IP)
sin_port = 443
sin_addr = 206.16.40.219

そして、彼らは私に吊るされたオブジェクトの名前を教えてくれたので、私はそれを捨てることができました、そして私はそうすることができます。

0:049> !dumpobj 0x09278dbc
Name: System.String
MethodTable 0x79b946b0
EEClass 0x79b949fc
Size 140(0x8c) bytes
mdToken: 0200000f (c:\windows\microsoft.net\framework\v1.1.4322\mscorlib.dll)
String: https://www.vendorname.com/services/v2006/Authentication

彼らはどのようにしてそのスタックトレースからプライベートシンボルなしでそれらのオブジェクトを識別するようになりましたか?管理者として、私はこのコードをデバッグモードでコンパイルすることも、最後の手段を除いてデバッグコードを本番環境にデプロイすることもできません。マイクロソフトは私が持っているのとまったく同じ情報を持っていて、彼らは答えを見つけたので、私が無知のこぶを乗り越えることができればそれを見つけることができると思います。

(1つの回答ごとに、WinDBGシンボル検索パスには次のように記載されています。 SRV*D:\Tools\Debuggers\Symbols*http://msdl.microsoft.com/download/symbols

ありがとうございました。

4

3 に答える 3

5

私の推測では、ソケット オブジェクトをダンプして内部フィールドを調べたのでしょう。!dso を使用してすべてのスタック オブジェクトのアドレスをダンプするか、 !dumpheap -type System.Net.Sockets.Socket を使用してメモリ内のすべての Socket オブジェクトを取得できます。

オブジェクトの内部を知ることは、ここで大いに役立ちます。.NET ソース コード、または.NET Reflectorによって生成された逆コンパイルがあれば、ソケット オブジェクトの内部を理解するのに役立ちます。

m_RemoteEndPointソケット オブジェクトをダンプすると、フィールドおよびのメモリ アドレスが得られますm_RightEndPoint。そのうちの 1 人が IP アドレス、ポート、およびファミリを提供した可能性があります。

于 2009-07-15T15:42:14.657 に答える
1

おそらく、すべてのシンボル ファイルのローカル コピーがあります。

ここからダウンロードしてローカル システムに配置し、次のように入力してデバッガにロードできます。

.symfix c:\YourLocalSymbols

.reload

于 2009-07-15T15:22:27.473 に答える
1

彼らはSymbol Serverを使用してシンボルを取得しました。

于 2009-07-15T14:54:30.003 に答える