2012-05-08 15 views
0

クライアントの.NET 2.0 WinCE(6.0)アプリケーションでクラッシュをデバッグしています。私はデバイスから.kdmpを取り出し、WinDbgで開きましたが、正直言って私が探しているものは分かりません。私はそれがアクセス違反であることがわかりますが、それは私が知ることができるすべてです。 WinDbg for .NET Compact Frameworkの使用に関するヒントは高く評価されます。私はツールの経験がありません。ここで WinDbgを使用してWinCEデバイス上の.NETアプリケーションでAccessViolationをデバッグする

は組み立てられていない命令とロードされたモジュール
1:000:armce> u 80428ca8 
80428ca8 e5913010 ldr   r3,[r1,#0x10] 
80428cac e3530001 cmp   r3,#1 
80428cb0 0a000005 beq   80428ccc 
80428cb4 e3530002 cmp   r3,#2 
80428cb8 1a00000c bne   80428cf0 
80428cbc e1a03004 mov   r3,r4 
80428cc0 e2802010 add   r2,r0,#0x10 
80428cc4 eb000830 bl   8042ad8c 
1:000:armce> lm 
start end  module name 
00010000 00074000 scanner (deferred)    
40010000 400a6000 coredll (deferred)    
400b0000 400c2000 fpcrt  (deferred)    
40120000 4012d000 zlib  (deferred)    
40140000 401a5000 commctrl (deferred)    
40290000 402a0000 iphlpapi (deferred)    
402b0000 402bd000 ws2  (deferred)    
402c0000 402c6000 wspm  (deferred)    
402d0000 402d6000 nspm  (deferred)    
402f0000 402fb000 ssllsp  (deferred)    
40380000 403ba000 netui  (deferred)    
40400000 40405000 lpcrt  (deferred)    
404b0000 404b7000 secur32 (deferred)    
405f0000 4066a000 ole32  (deferred)    
40670000 406a5000 oleaut32 (deferred)    
406d0000 40722000 rpcrt4  (deferred)    
40730000 4078b000 imaging (deferred)    
419b0000 419c2000 mscoree (deferred)    
41e30000 41e5b000 rsaenh  (deferred)    
41f30000 41f37000 rcm2api32 (deferred)    
41f40000 41f53000 edbgtl  (deferred)    
41f70000 41f7f000 tcpconnectiona (deferred)    
41f80000 41fbd000 netcfagl2_0 (deferred)    
41fc0000 41fd0000 sqlceme30 (deferred)    
42010000 420db000 mscoree2_0 (deferred)    
42160000 42184000 sqlceer30en (deferred)    
80400000 80420000 NK   (deferred) 

そしてCEワトソンからの情報が

enter iDump Info

ビューアをダンプしている。ここ!analyze -v

******************************************************************************* 
*                    * 
*      Win CE Exception Analysis        * 
*                    * 
******************************************************************************* 


Debugging Details: 
------------------ 

GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
Unable to get program counter 
TRIAGER: Could not open triage file : C:\Program Files\Windows Kits\8.0\Debuggers\x86\triage\guids.ini, error 2 
SYMSRV: C:\Program Files\Windows Kits\8.0\Debuggers\x86\sym\ole32.dll\4D7757B97a000\ole32.dll not found 
SYMSRV: C:\Program Files\Windows Kits\8.0\Debuggers\x86\sym\ole32.dll\4D7757B97a000\ole32.dll not found 
SYMSRV: http://msdl.microsoft.com/download/symbols/ole32.dll/4D7757B97a000/ole32.dll not found 
DBGHELP: C:\Program Files\Windows Kits\8.0\Debuggers\ole32.dll - file not found 
DBGHELP: C:\Program Files\Windows Kits\8.0\Debuggers\ole32.dll - file not found 
SYMSRV: http://msdl.microsoft.com/download/symbols/ole32.dll/4D7757B97a000/ole32.dll not found 
SYMSRV: C:\Program Files\Windows Kits\8.0\Debuggers\x86\sym\ole32.dll\4D7757B97a000\ole32.dll not found 
DBGHELP: C:\Program Files\Windows Kits\8.0\Debuggers\ole32.dll - file not found 
DBGHELP: C:\Program Files\Windows Kits\8.0\Debuggers\ole32.dll - file not found 
DBGHELP: C:\Program Files\Windows Kits\8.0\Debuggers\ole32.dll - file not found 
DBGHELP: C:\Program Files\Windows Kits\8.0\Debuggers\ole32.dll - file not found 
DBGHELP: ole32.dll not found in c:\documents and settings\thomas carvin\desktop\scanner\bin\debug 
DBGHELP: ole32.dll not found in c:\documents and settings\thomas carvin\desktop\scanner\bin\debug 
DBGENG: ole32.dll - Image mapping disallowed by non-local path. 
Unable to load image ole32.dll, Win32 error 0n2 
DBGENG: ole32.dll - Partial symbol image load missing image info 
DBGHELP: No header for ole32.dll. Searching for dbg file 
DBGHELP: c:\documents and settings\thomas carvin\desktop\scanner\bin\debug\ole32.dbg - file not found 
DBGHELP: c:\documents and settings\thomas carvin\desktop\scanner\bin\debug\dll\ole32.dbg - path not found 
DBGHELP: c:\documents and settings\thomas carvin\desktop\scanner\bin\debug\symbols\dll\ole32.dbg - path not found 
DBGHELP: .\ole32.dbg - file not found 
DBGHELP: .\dll\ole32.dbg - path not found 
DBGHELP: .\symbols\dll\ole32.dbg - path not found 
DBGHELP: ole32.dll missing debug info. Searching for pdb anyway 
DBGHELP: c:\documents and settings\thomas carvin\desktop\scanner\bin\debug\ole32.pdb - file not found 
DBGHELP: c:\documents and settings\thomas carvin\desktop\scanner\bin\debug\dll\ole32.pdb - file not found 
DBGHELP: c:\documents and settings\thomas carvin\desktop\scanner\bin\debug\symbols\dll\ole32.pdb - file not found 
DBGHELP: ole32.pdb - file not found 
*** WARNING: Unable to verify timestamp for ole32.dll 
*** ERROR: Module load completed but symbols could not be loaded for ole32.dll 
DBGHELP: ole32 - no symbols loaded 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
GetContextState failed, 0x80070570 
Unable to get current machine context, Win32 error 0n1392 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
GetContextState failed, 0x80070570 
Unable to get current machine context, Win32 error 0n1392 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
GetContextState failed, 0x80070570 
Unable to get current machine context, Win32 error 0n1392 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
GetContextState failed, 0x80070570 
Unable to get current machine context, Win32 error 0n1392 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
GetContextState failed, 0x80070570 
Unable to get current machine context, Win32 error 0n1392 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
GetContextState failed, 0x80070570 
Unable to get current machine context, Win32 error 0n1392 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
GetContextState failed, 0x80070570 
Unable to get current machine context, Win32 error 0n1392 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
GetContextState failed, 0x80070570 
Unable to get current machine context, Win32 error 0n1392 
GetContextState failed, 0x80070570 
Unable to get program counter 
GetContextState failed, 0x80070570 
GetContextState failed, 0x80070570 
Unable to get current machine context, Win32 error 0n1392 
TRIAGER: Could not open triage file : C:\Program Files\Windows Kits\8.0\Debuggers\x86\triage\modclass.ini, error 2 

FAULTING_IP: 
+0 
80428ca8 e5913010 ldr   r3,[r1,#0x10] 

EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff) 
ExceptionAddress: 80428ca8 
    ExceptionCode: c0000005 (Access violation) 
    ExceptionFlags: 00000000 
NumberParameters: 2 
    Parameter[0]: 00000000 
    Parameter[1]: 00000010 
Attempt to read from address 00000010 

FAULTING_THREAD: 0cf2001a 

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: 00000010 

READ_ADDRESS: 00000010 

FOLLOWUP_IP: 
+0 
80428ca8 e5913010 ldr   r3,[r1,#0x10] 

CE_DEVLOG: <ANALYSIS> 
    <CELG_NAME>OEM</CELG_NAME> 
    <CELG_VALUE>MOTOROLA MC3100R</CELG_VALUE> 
</ANALYSIS> 

CE_DEVLOG: <ANALYSIS> 
    <CELG_NAME>Build</CELG_NAME> 
    <CELG_VALUE>0</CELG_VALUE> 
</ANALYSIS> 

CE_DEVLOG: <ANALYSIS> 
    <CELG_NAME>RAM</CELG_NAME> 
    <CELG_VALUE>135143424</CELG_VALUE> 
</ANALYSIS> 

CE_DEVLOG: <ANALYSIS> 
    <CELG_NAME>FreeRAM</CELG_NAME> 
    <CELG_VALUE>107048960</CELG_VALUE> 
</ANALYSIS> 

CE_DEVLOG: <ANALYSIS> 
    <CELG_NAME>Store</CELG_NAME> 
    <CELG_VALUE>83693568</CELG_VALUE> 
</ANALYSIS> 

CE_DEVLOG: <ANALYSIS> 
    <CELG_NAME>FreeStore</CELG_NAME> 
    <CELG_VALUE>54960128</CELG_VALUE> 
</ANALYSIS> 

APP: scanner.exe 

IP_ON_HEAP: 8042c0e0 

ADDITIONAL_DEBUG_TEXT: Followup set based on attribute [Is_ChosenCrashFollowupThread] from Frame:[0] on thread:[PSEUDO_THREAD] 

LAST_CONTROL_TRANSFER: from 8042c0e0 to 80428ca8 

DEFAULT_BUCKET_ID: STACKIMMUNE 

PRIMARY_PROBLEM_CLASS: STACKIMMUNE 

BUGCHECK_STR: APPLICATION_FAULT_STACKIMMUNE_NULL_CLASS_PTR_READ_ZEROED_STACK 

FRAME_ONE_INVALID: 1 

STACK_TEXT: 
00000000 00000000 scanner.exe!Unknown+0x0 


SYMBOL_STACK_INDEX: 0 

SYMBOL_NAME: scanner.exe!Unknown 

FOLLOWUP_NAME: MachineOwner 

MODULE_NAME: scanner 

IMAGE_NAME: scanner.exe 

DEBUG_FLR_IMAGE_TIMESTAMP: 0 

STACK_COMMAND: ** Pseudo Context ** ; kb 

FAILURE_BUCKET_ID: STACKIMMUNE_c0000005_scanner.exe!Unloaded 

BUCKET_ID: ARM_APPLICATION_FAULT_STACKIMMUNE_NULL_CLASS_PTR_READ_ZEROED_STACK_scanner.exe!Unknown 

Followup: MachineOwner 

から出力され、私は主に方向を探しています。この時点で、210

Modules

Callstack

Memory Block

Threads

。誰かが、この問題は、依存ライブラリやデバイス/ OSのおかげで、アプリケーションのためだと言うことができる場合、それは素晴らしい出発点になります。

+0

あまりにも画像が収縮してしまいましたが、そのURLを直接入力すると細かく見えることがわかりました。 – tcarvin

答えて

4

Cool!

GetContextStateが失敗し、0x80070570

:私は、しかし、私はここから物事のカップルを解読することができ、私はCR ARMのデバッグとゼロの経験を持っているのx86/x64の:)

以外のアーキテクチャからクラッシュダンプを見て大好きです

一般的に、これらのエラーは悪く、何らかの方法でダンプファイルが破損していることを意味します。

のLDR R3、[R1、#1の0x10]

そして、あなたはアドレスが0x10を参照しようとしましたので、あなたの例外レコードによると、クラッシュが起こった:

はここにあなたの断層の命令ですアドレス00000010

から読み取るする

試み

したがって、前の命令でr1はゼロでなければなりません。通常、このパターンを見ると、データ構造体へのNULLポインタの逆参照であるため、0x10はアクセスしようとしているデータ構造体のフィールドのオフセットです。

残念ながら、スタックはそこからガーベッジされています(何らかの理由でゼロになっているとの表示があるため)、そこから詳細を取得するのは難しいです。次のコマンドは情報を表示しますか?あなたが、どのようにあなたがそこに着いたところうまくするのは非常に難しいことができますので、カーネルの途中で

u 80428ca8 
lm 
+0

私はリクエストされた情報を追加しました...私が見ているものを実際に知っているわけではありません。カーネル(NK)?彼らはどのようにして範囲の終わりを過ぎることができますか? – tcarvin

+0

@snoone:どこでクラッシュダンプを読むことを学びましたか?私もこれを学びたいです! – jp2code

+0

@tcarvinそれは奇妙に思える。ロードされたモジュールリストが不完全で、フォルト中の命令が他のモジュールにリストされていないように見えます。これは、通常、シンボルに問題があるか、破損したダンプに(もう一度)発生します。私はこれをx86/x64ダンプのベースにしていますが、おそらくCEダンプに関する何か不思議なことがあります。これらのデバイスにソフトウェアをインストールしますか? – snoone

1

ランディングは、最悪です。残念なことに、各プラットフォームに固有のデバッグシンボルを取得することは非常に難しく、マイクロソフトからではなくMotorolaから取得する必要があります。

ARMプロセッサの規約では、現在のリーフ関数の戻りアドレスがリンクレジスタlrに格納されています。各関数のプロローグは、このレジスタの値を、呼び出す関数によってゴミ箱に移動されない場所に格納します。スタックを巻き戻すには、ハードウェア例外が発生した場合、Windows CEではプロローグに特定の形式が必要です。仮想アンワインダーアルゴリズムはARM Prolog and Epilogに記述されています(Windowsの例外処理はで実際にはは実際の例外ハンドラーが検出されるまでスタックを巻き戻しません)。そのハンドラーがスタックを歩いていることがわかります) 。そのアルゴリズムに従うことで、自分自身でスタックを歩いて戻ることができます。

そのリンクのexamplesは実際には非常に典型的ではありません - コードはC/C++ varargs関数の永続レジスタを保存する前にr0-r3をスタックに保存するだけです。これは、追加の引数の隣にあるようにするためです。 Windows CEのARM呼び出し規約では、最初の4つの引数がレジスタr0〜r3の関数に渡され、スタックの5番目以降の引数が渡されます。したがって、va_argsを使用する関数は、最初の4つを他のスタックの隣のスタックにプッシュする必要があるため、すべての引数を同じように扱うことができます。

通常、ARM関数は、関数によって上書きされたすべての揮発性レジスタを格納するstmdb(STORE Multiple、Decrement Before)命令で開始します。この命令は、通常のコードではあまり頻繁に使用されないので、stmdbはほとんど常に関数の最初の命令です。したがって、その命令とスタックから、lrの値が何であったか、したがってどこに戻ってくるかを調べることができます。それで、あなたがどこかで認識できるようになるまで、それぞれの方法についてそれを繰り返すことができます。うまくいけば、これはDLLのインポートセクションにありますが、mscoree2_0.dllまたはnetcfagl2_0.dllにある可能性があります。おそらく、Compact Frameworkアセンブリの逆アセンブリを検索して、そのネイティブエントリポイントに呼び出されたマネージコードを見つける必要があります。

関連する問題