今回は、スタックトレースを見ながら要因を追跡していきます。
WinDbgを起動します。
[File]→[Open Crash Dump...]
次の場所を開く(Windows Server 2003):
%USERPROFILE%\Local Settings\Application Data\PCHealth\ErrorRep\QSignoff
8C80969E.cab等、cabを開きます。~~~
打ち込みます(.NET Framework 2.0対応のため)
.load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll
結果:
0:002> .load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll ------------------------------------------------------------ sos.dll needs a full memory dump for complete functionality. You can create one with .dump /ma <filename> ------------------------------------------------------------
~~~
打ち込みます。発出された例外を表示。
!pe
結果:
0:002> !pe Exception object: 09fb423c Exception type: System.IO.IOException Message: 指定されたネットワーク名は利用できません。 InnerException: <none> StackTrace (generated): SP IP Function 00A4FB64 799D0B09 mscorlib_ni!System.IO.__Error.WinIOError(Int32, System.String)+0x75c9f9 00A4FBC0 79A0CE90 mscorlib_ni!System.IO.FileStream.WriteCore(Byte[], Int32, Int32)+0x7221a0 00A4FBE0 792EACD2 mscorlib_ni!System.IO.FileStream.FlushWrite(Boolean)+0x22 00A4FBF0 792EB7F7 mscorlib_ni!System.IO.FileStream.Dispose(Boolean)+0x57 00A4FC20 792CA80B mscorlib_ni!System.IO.FileStream.Finalize()+0x1b StackTraceString: <none> HResult: 80070040
考察:
- FileStreamがExceptionの発生源になっています。
- FileStreamは、ファイル名を持っているはずなので、それを探ってみたいと思います。
~~~
打ち込みます(スタックトレースを表示します)
!CLRStack -p
結果:
0:002> !CLRStack -p OS Thread Id: 0x2198 (2) ESP EIP 00a4fac0 7c97845c [HelperMethodFrame: 00a4fac0] 00a4fb64 799d0b09 System.IO.__Error.WinIOError(Int32, System.String) PARAMETERS: errorCode = <no data> maybeFullPath = <no data> 00a4fbc0 79a0ce90 System.IO.FileStream.WriteCore(Byte[], Int32, Int32) PARAMETERS: this = <no data> buffer = <no data> offset = <no data> count = <no data> 00a4fbe0 792eacd2 System.IO.FileStream.FlushWrite(Boolean) PARAMETERS: this = 0x010a3550 calledFromFinalizer = <no data> 00a4fbf0 792eb7f7 System.IO.FileStream.Dispose(Boolean) PARAMETERS: this = 0x010a3550 disposing = 0x00000000 00a4fc20 792ca80b System.IO.FileStream.Finalize() PARAMETERS: this = <no data>
考察:
- FileStreamのthisポインタが露出しています。
- FileStreamのthisポインタから、インスタンスの内容物を解剖します。
打ち込みます。FileStreamのthisポインタをダンプします。
!do 0x010a3550
結果:
0:002> !do 0x010a3550 Name: System.IO.FileStream MethodTable: 793051f4 EEClass: 790df0f0 Size: 80(0x50) bytes (C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll) Fields: MT Field Offset Type VT Attr Value Name 79330888 400018a 4 System.Object 0 instance 00000000 __identity 7992db14 4001b70 8 ...ream+ReadDelegate 0 instance 00000000 _readDelegate 7992dba0 4001b71 c ...eam+WriteDelegate 0 instance 00000000 _writeDelegate 7931c008 4001b72 10 ...ng.AutoResetEvent 0 instance 00000000 _asyncActiveEvent 79332eb8 4001b73 14 System.Int32 1 instance 1 _asyncActiveCount 7932e968 4001b6f 574 System.IO.Stream 0 shared static Null >> Domain:Value 00161ee0:0109bab4 << 793336dc 4001bfb 28 System.Byte[] 0 instance 010a4a90 _buffer 79330c6c 4001bfc 2c System.String 0 instance 010a35a0 _fileName 79304738 4001bfd 44 System.Boolean 1 instance 0 _isAsync 79304738 4001bfe 45 System.Boolean 1 instance 0 _canRead 79304738 4001bff 46 System.Boolean 1 instance 1 _canWrite 79304738 4001c00 47 System.Boolean 1 instance 1 _canSeek 79304738 4001c01 48 System.Boolean 1 instance 0 _exposedHandle 79304738 4001c02 49 System.Boolean 1 instance 0 _isPipe 79332eb8 4001c03 34 System.Int32 1 instance 0 _readPos 79332eb8 4001c04 38 System.Int32 1 instance 0 _readLen 79332eb8 4001c05 3c System.Int32 1 instance 4096 _writePos 79332eb8 4001c06 40 System.Int32 1 instance 4096 _bufferSize 7932ec38 4001c07 30 ...es.SafeFileHandle 0 instance 010a3640 _handle 793324f8 4001c08 18 System.Int64 1 instance 111877 _pos 793324f8 4001c09 20 System.Int64 1 instance -1 _appendStart 79304738 4001bf9 adc System.Boolean 1 shared static _canUseAsync >> Domain:Value 00161ee0:1 << 79334198 4001bfa 57c ...ompletionCallback 0 shared static IOCallback >> Domain:Value 00161ee0:0109d148 <<
考察:
- _fileName が 010a35a0 を指しています。
~~~
打ち込みます。
!do 010a35a0
結果:
0:002> !do 010a35a0 Name: System.String MethodTable: 79330c6c EEClass: 790ed65c Size: 158(0x9e) bytes (C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll) String: \\192.168.2.119\share\DD7Backup\FDSET\DD7Backup遠方(11日)(夜)(Set1)(遠).log Fields: MT Field Offset Type VT Attr Value Name 79332eb8 4000096 4 System.Int32 1 instance 71 m_arrayLength 79332eb8 4000097 8 System.Int32 1 instance 70 m_stringLength 7933194c 4000098 c System.Char 1 instance 5c m_firstChar 79330c6c 4000099 10 System.String 0 shared static Empty >> Domain:Value 00161ee0:01091198 << 7933189c 400009a 14 System.Char[] 0 shared static WhitespaceChars >> Domain:Value 00161ee0:01091714 <<
考察:
- 知りたかった情報が露出しました。
「指定されたネットワーク名は利用できません」の発生原因は、
バックアップのログファイルを書き込んでいる最中に、
NASがダウンしたからだ、と考えられます。
※ google-code-prettifyを組み込み、表示を最適化しました。
参考:SOS.dll (SOS デバッガー拡張)
0 件のコメント:
コメントを投稿