2009-07-31 14 views
1

まず私は、合計のWinDbgのnoobだとしましょう有用な情報を示していないので、これは私がアプリケーション持っWinDbgのは

...簡単な質問かもしれません(「MyAppのを」 - 名前は無実を保護するために変更します!)私はそれが例外を投げているので、デバッグしようとしています。これはユーザーのマシンでのみ発生します。私は開発マシンで再現できませんでした。だから私は、ユーザーのマシン上でDebugDiagをセットアップし、フルダンプをキャプチャしました。その後、私はWinDbgにダンプを読み込んで、analyze -vkpを実行して何が起こっているのかを調べましたが、これらのどちらも私に探している情報を与えてくれないようです - 機能...私はシンボルファイルのパスに「MyApp.pdb」にパスを指定することでロードされたシンボルファイルがあると思う問題を引き起こしている行の数):

 
srv*c:\symcache*http://msdl.microsoft.com/download/symbols;srv*c:\symcache*C:\dev\Customer\MyAppSln\MyApp\Debug 

まず、ここからの出力ですkp

 
0:004> kp 
ChildEBP RetAddr 
WARNING: Stack unwind information not available. Following frames may be wrong. 
0502f474 7c347966 MyApp!DllMain+0x3e8a6 
0502f4bc 7c3a2448 msvcr71!_nh_malloc(unsigned int size = <Memory access error>, int nhFlag = <Memory access error>)+0x24 [f:\vs70builds\3052\vc\crtbld\crt\src\malloc.c @ 117] 
0502f57c 7c3416b3 msvcp71!std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::_Tidy(bool _Built = <Memory access error>, unsigned int _Newsize = <Memory access error>)+0x45 [f:\vs70builds\3077\vc\crtbld\crt\src\xstring @ 1520] 
0502f610 7c3a32de msvcr71!_heap_alloc(unsigned int size = <Memory access error>)+0xe0 [f:\vs70builds\3052\vc\crtbld\crt\src\malloc.c @ 212] 
0502f620 7c3b3f63 msvcp71!wmemcpy(wchar_t * _S1 = 0x04e463b9 "Ҹ???", wchar_t * _S2 = 0xffffffff "--- memory read error at address 0xffffffff ---", unsigned int _N = 0x4e25212)+0x14 [f:\vs70builds\3077\vc\crtbld\crt\src\wchar.h @ 843] 
0502f640 04e463b9 msvcp71!std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::assign(class std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > * _Right = 0xffffffff, unsigned int _Roff = 0x4e25212, unsigned int _Count = 2)+0x7c [f:\vs70builds\3077\vc\crtbld\crt\src\xstring @ 601] 
0502f770 04df1077 MyApp!DllMain+0x65329 
0502f824 04e01b35 MyApp!DllMain+0xffe7 
0502ff08 04dfe034 MyApp!DllMain+0x20aa5 
0502ff48 04dfde4f MyApp!DllMain+0x1cfa4 
0502ff88 7648d0e9 MyApp!DllMain+0x1cdbf 
0502ffc4 773499f9 kernel32!BaseThreadInitThunk+0xe 
0502ffd4 7738198e ntdll!RtlQueryInformationAcl+0x8b 
0502ffec 00000000 ntdll!_RtlUserThreadStart+0x1b 

私は、具体的解読しようとしている行がある「のMyAppのDllMain + 0x65329!」これが最後のlがあるとしてこれは実行されているようで、malloc呼び出し内でエラーが発生しています。これは明らかに例外がスローされているところです。ソースファイルと行番号の代わりにモジュールとオフセットのみを表示するのは間違っていますか?

malloc呼び出しの上にある行が再びMyAppに戻ってきた理由もわかりません - 誰かがそれを説明できるかもしれません。

は、念のために、ここで「-v分析」からの出力です:

 
0:004> !analyze -v 
******************************************************************************* 
*                    * 
*      Exception Analysis         * 
*                    * 
******************************************************************************* 

*** WARNING: Unable to verify checksum for MyApp.exe 
*** ERROR: Module load completed but symbols could not be loaded for MyApp.exe 
*** WARNING: Unable to verify checksum for ThirdPartyDll.dll 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ThirdPartyDll.dll - 
*** WARNING: Unable to verify checksum for mdnsNSP.dll 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for mdnsNSP.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for SLC.dll - 

FAULTING_IP: 
MyApp!DllMain+3e8a6 
04e1f936 8b16   mov  edx,dword ptr [esi] 

EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff) 
ExceptionAddress: 04e1f936 (MyApp!DllMain+0x0003e8a6) 
    ExceptionCode: c0000005 (Access violation) 
    ExceptionFlags: 00000000 
NumberParameters: 2 
    Parameter[0]: 00000000 
    Parameter[1]: 00000000 
Attempt to read from address 00000000 

PROCESS_NAME: MyApp.exe 

ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at "0x%08lx" referenced memory at "0x%08lx". The memory could not be "%s". 

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at "0x%08lx" referenced memory at "0x%08lx". The memory could not be "%s". 

EXCEPTION_PARAMETER1: 00000000 

EXCEPTION_PARAMETER2: 00000000 

READ_ADDRESS: 00000000 

FOLLOWUP_IP: 
msvcr71!_heap_alloc+e0 [f:\vs70builds\3052\vc\crtbld\crt\src\malloc.c @ 212] 
7c3416b3 e88e0c0000  call msvcr71!__SEH_epilog (7c342346) 

NTGLOBALFLAG: 0 

APPLICATION_VERIFIER_FLAGS: 0 

LAST_CONTROL_TRANSFER: from 00000000 to 773bbb33 

FAULTING_THREAD: ffffffff 

BUGCHECK_STR: APPLICATION_FAULT_ACTIONABLE_HEAP_CORRUPTION_heap_failure_freelists_corruption_NULL_POINTER_READ_SHUTDOWN 

PRIMARY_PROBLEM_CLASS: ACTIONABLE_HEAP_CORRUPTION_heap_failure_freelists_corruption_SHUTDOWN 

DEFAULT_BUCKET_ID: ACTIONABLE_HEAP_CORRUPTION_heap_failure_freelists_corruption_SHUTDOWN 

STACK_TEXT: 
773bbb33 ntdll!RtlpAllocateHeap+0x7ad 
773a6e0c ntdll!RtlAllocateHeap+0x1e3 
7c3416b3 msvcr71!_heap_alloc+0xe0 


FAULTING_SOURCE_CODE: 
No source found for 'f:\vs70builds\3052\vc\crtbld\crt\src\malloc.c' 


SYMBOL_STACK_INDEX: 2 

SYMBOL_NAME: msvcr71!_heap_alloc+e0 

FOLLOWUP_NAME: MachineOwner 

MODULE_NAME: msvcr71 

IMAGE_NAME: msvcr71.dll 

DEBUG_FLR_IMAGE_TIMESTAMP: 3e561eac 

STACK_COMMAND: dds 7740c078 ; kb 

FAILURE_BUCKET_ID: ACTIONABLE_HEAP_CORRUPTION_heap_failure_freelists_corruption_SHUTDOWN_c0000005_msvcr71.dll!_heap_alloc 

BUCKET_ID: APPLICATION_FAULT_ACTIONABLE_HEAP_CORRUPTION_heap_failure_freelists_corruption_NULL_POINTER_READ_SHUTDOWN_msvcr71!_heap_alloc+e0 
+0

[WinDbgでシンボルを設定する方法は?](http://stackoverflow.com/questions/30019889/how-to-set-up-symbols-in-windbg) –

答えて

5

あなたはシンボルのパスを設定すると、あなたがそれらをリロードしたのですか?

.reload

私はあなたが、シンボルパスに

srv*c:\symcache*C:\dev\Customer\MyAppSln\MyApp\Debug

を追加することが望ましい効果を持っているかわかりません。 私は通常、最初の.sympath内のすべてのローカルパスを一覧表示し、最後のステップとして、私は.symfix +は、Microsoftシンボルサーバーを使用してパブリックシンボルを構成するために実行します。

 
.sympath C:\dev\Customer\MyAppSln\MyApp\Debug 
.symfix+ c:\symcache 

最初のローカルパスをリストアップしていることであることの根拠デバッガはローカルサーバを単に取得するのではなく、リモートサーバにpdbs(それが存在しない)をチェックする必要はありません。

とにかく、MyAppのシンボルがロードされないため、スタックウォーキングがうまく動作しないという問題があります。 デバッガは上から順にスタックを歩き回ります。そのため、MyAppが表示されているのはアクセス違反が発生した場所です。 今、デバッガはこの時点でシンボルを持っていないので、上に関数につながった呼び出し連鎖しか推測できません。 誤解を招くパスをたどって間違っていると推測します。

7

あなたはPDBがあなたのシンボルパスにする必要があると思われる場合、あなたはこのような何かを実行する必要があります!

!sym noisy 
.reload MyApp.dll 
kp 

をデバッガが、それはシンボルをロードできなかった理由に関するより詳細な情報を提供するために、ノイズの多い原因をSYM - MyApp.pdbが見つかりませんでしたが、見つかりましたが一致しません。これは、シンボルが読み込まれない理由を調べるのに役立ちます。 !sym noisyは冗長シンボル出力を再びオフにします。

関連する問題