2012年7月17日火曜日

pdftotextで起こる怪

pdftotextで、PDFファイルからテキスト抽出しますと、怪しい表現になる場合が有ります。

「ソフトウェア」が、「ソフトウェゕ」に化けてしまう。「ソフトウェゕ」で、検索

「ユーティリティ」が、「ユーテゖリテゖ」が化けてしまう。「ユーテゖリテゖ」で、検索

ご存知ないでしょうか…

2012年7月12日木曜日

WinDbgで、エラー報告データを解析2(.NETfx 2.0向け)

前回の続編です。

今回は、スタックトレースを見ながら要因を追跡していきます。

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 デバッガー拡張)

2012年7月5日木曜日

Alphaleonis.Win32.Vss.VssSnapshotSetInProgressException

対策:
  • Volume Shadow Copyサービスを開始状態→停止状態にしました。
考えられる点:
  • 短時間で、スナップショットを作って消して、を繰り返すと発生するようです。

―――

Alphaleonis.Win32.Vss.VssSnapshotSetInProgressException はハンドルされませんでした。
  Message="The creation of a shadow copy is already in progress."
  Source="AlphaVSS.60.x64"
  StackTrace:
       場所 Alphaleonis.Win32.Vss.VssBackupComponents.StartSnapshotSet()
       場所 DiffBkCli.MSSnap.Start() 場所 C:\Proj\SyncAmaz\MSSnap.cs:行 90
       場所 SyncAmaz.Program.Main(String[] args) 場所 C:\Proj\SyncAmaz\Program.cs:行 167

―――

ログの名前:         Application
ソース:           VSS
日付:            2012/07/04 10:30:26
イベント ID:       13
タスクのカテゴリ:      なし
レベル:           エラー
キーワード:         クラシック
ユーザー:          N/A
コンピューター:       DD11
説明:
ボリューム シャドウ コピー サービス情報: CLSID {e579ab5f-1cc4-44b4-bed9-de0991ff0623} および名前 Coordinator を持つ COM サーバーを開始できません。[0x80070005, アクセスが拒否されました。
] 
イベント XML:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="VSS" />
    <EventID Qualifiers="0">13</EventID>
    <Level>2</Level>
    <Task>0</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2012-07-04T01:30:26.000000000Z" />
    <EventRecordID>9687</EventRecordID>
    <Channel>Application</Channel>
    <Computer>DD11</Computer>
    <Security />
  </System>
  <EventData>
    <Data>{e579ab5f-1cc4-44b4-bed9-de0991ff0623}</Data>
    <Data>Coordinator</Data>
    <Data>0x80070005, アクセスが拒否されました。
</Data>
    <Data>
    </Data>
    <Binary>2D20436F64653A2041444D50524F434330303030303135302D2043616C6C3A2041444D50524F434330303030303134342D205049443A202030303030323330342D205449443A202030303030343130382D20434D443A202076737361646D696E20206C69737420736861646F777320202D20557365723A204E616D653A20444431315C4B552C205349443A532D312D352D32312D3533323737373434382D323532383834363738392D323437363039333533372D31303031</Binary>
  </EventData>
</Event>
※ google-code-prettifyを組み込み、表示を最適化しました。