2009-08-04 12 views
0

私はDelphi 2009に変換したアプリケーションを持っています。「String format checking」と標準メモリマネージャがあります。私はhttp://www.microsoft.com/whdc/devtools/debugging/install64bit.mspxにMSのデバッグツールをダウンロードし、いくつかのデバッグファイルを手に入れましたが、何を作るのか分かりません。私はここからどこへ行くべきかについていくつかの指摘をしたいと思います。以下はデバッグファイルの上部です(下部にはすべてのドライバがロードされています)。Vista Delphi 2009アプリケーションを実行すると64ビットBSODが発生する

 
Opened log file 'c:\debuglog.txt' 
1: kd> .sympath srv*c:\symbols*http://msdl.microsoft.com/downloads/symbols 
Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/downloads/symbols 
Expanded Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/downloads/symbols 
1: kd> .reload;!analyze -v;r;kv;lmnt;.logclose;q 
Loading Kernel Symbols 
............................................................... 
................................................................ 
......................... 
Loading User Symbols 
Loading unloaded module list 
........ 
******************************************************************************* 
*                    * 
*      Bugcheck Analysis         * 
*                    * 
******************************************************************************* 

UNEXPECTED_KERNEL_MODE_TRAP (7f) 
This means a trap occurred in kernel mode, and it's a trap of a kind 
that the kernel isn't allowed to have/catch (bound trap) or that 
is always instant death (double fault). The first number in the 
bugcheck params is the number of the trap (8 = double fault, etc) 
Consult an Intel x86 family manual to learn more about what these 
traps are. Here is a *portion* of those codes: 
If kv shows a taskGate 
     use .tss on the part before the colon, then kv. 
Else if kv shows a trapframe 
     use .trap on that value 
Else 
     .trap on the appropriate frame will show where the trap was taken 
     (on x86, this will be the ebp that goes with the procedure KiTrap) 
Endif 
kb will then show the corrected stack. 
Arguments: 
Arg1: 0000000000000008, EXCEPTION_DOUBLE_FAULT 
Arg2: 0000000080050033 
Arg3: 00000000000006f8 
Arg4: fffff80001ee1678 

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


BUGCHECK_STR: 0x7f_8 

CUSTOMER_CRASH_COUNT: 4 

DEFAULT_BUCKET_ID: COMMON_SYSTEM_FAULT 

PROCESS_NAME: SomeApplication.e 

CURRENT_IRQL: 1 

EXCEPTION_RECORD: fffffa60087b43c8 -- (.exr 0xfffffa60087b43c8) 
.exr 0xfffffa60087b43c8 
ExceptionAddress: fffff80001ed0150 (nt!RtlVirtualUnwind+0x0000000000000250) 
    ExceptionCode: 10000004 
    ExceptionFlags: 00000000 
NumberParameters: 2 
    Parameter[0]: 0000000000000000 
    Parameter[1]: 00000000000000d8 

TRAP_FRAME: fffffa60087b4470 -- (.trap 0xfffffa60087b4470) 
.trap 0xfffffa60087b4470 
NOTE: The trap frame does not contain all registers. 
Some register values may be zeroed or incorrect. 
rax=0000000000000050 rbx=0000000000000000 rcx=0000000000000004 
rdx=00000000000000d8 rsi=0000000000000000 rdi=0000000000000000 
rip=fffff80001ed0150 rsp=fffffa60087b4600 rbp=fffffa60087b4840 
r8=0000000000000006 r9=fffff80001e4e000 r10=ffffffffffffff88 
r11=fffff8000204c000 r12=0000000000000000 r13=0000000000000000 
r14=0000000000000000 r15=0000000000000000 
iopl=0   nv up ei pl zr na po nc 
nt!RtlVirtualUnwind+0x250: 
fffff800`01ed0150 488b02   mov  rax,qword ptr [rdx] ds:00000000`000000d8=???????????????? 
.trap 
Resetting default scope 

LAST_CONTROL_TRANSFER: from fffff80001ea81ee to fffff80001ea8450 

STACK_TEXT: 
fffffa60`005f1a68 fffff800`01ea81ee : 00000000`0000007f 00000000`00000008 00000000`80050033 00000000`000006f8 : nt!KeBugCheckEx 
fffffa60`005f1a70 fffff800`01ea6a38 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiBugCheckDispatch+0x6e 
fffffa60`005f1bb0 fffff800`01ee1678 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiDoubleFaultAbort+0xb8 
fffffa60`087b3c90 fffff800`01ea82a9 : fffffa60`087b43c8 00000000`00000001 fffffa60`087b4470 00000000`0000023b : nt!KiDispatchException+0x34 
fffffa60`087b4290 fffff800`01ea70a5 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000001 : nt!KiExceptionDispatch+0xa9 
fffffa60`087b4470 fffff800`01ed0150 : fffffa60`087b5498 fffffa60`087b4e70 fffff800`01f95190 fffff800`01e4e000 : nt!KiPageFault+0x1e5 
fffffa60`087b4600 fffff800`01ed3f78 : fffffa60`00000001 00000000`00000000 00000000`00000000 ffffffff`ffffff88 : nt!RtlVirtualUnwind+0x250 
fffffa60`087b4670 fffff800`01ee1706 : fffffa60`087b5498 fffffa60`087b4e70 fffffa60`00000000 00000000`00000000 : nt!RtlDispatchException+0x118 
fffffa60`087b4d60 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiDispatchException+0xc2 


STACK_COMMAND: kb 

FOLLOWUP_IP: 
nt!KiDoubleFaultAbort+b8 
fffff800`01ea6a38 90    nop 

SYMBOL_STACK_INDEX: 2 

SYMBOL_NAME: nt!KiDoubleFaultAbort+b8 

FOLLOWUP_NAME: MachineOwner 

MODULE_NAME: nt 

IMAGE_NAME: ntkrnlmp.exe 

DEBUG_FLR_IMAGE_TIMESTAMP: 49e0237f 

FAILURE_BUCKET_ID: X64_0x7f_8_nt!KiDoubleFaultAbort+b8 

BUCKET_ID: X64_0x7f_8_nt!KiDoubleFaultAbort+b8 

Followup: MachineOwner 
--------- 

rax=fffffa60005f1b70 rbx=fffffa60087b43c8 rcx=000000000000007f 
rdx=0000000000000008 rsi=fffffa60087b4470 rdi=fffff80001f9bfa4 
rip=fffff80001ea8450 rsp=fffffa60005f1a68 rbp=fffffa60005f1c30 
r8=0000000080050033 r9=00000000000006f8 r10=fffff80001ee1678 
r11=fffffa60087b4468 r12=0000000000000000 r13=fffffa60087b4290 
r14=fffff8000205149c r15=fffff80001e4e000 
iopl=0   nv up ei ng nz na pe nc 
cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b    efl=00000282 
nt!KeBugCheckEx: 
fffff800`01ea8450 48894c2408  mov  qword ptr [rsp+8],rcx ss:0018:fffffa60`005f1a70=000000000000007f 
Child-SP   RetAddr   : Args to Child               : Call Site 
fffffa60`005f1a68 fffff800`01ea81ee : 00000000`0000007f 00000000`00000008 00000000`80050033 00000000`000006f8 : nt!KeBugCheckEx 
fffffa60`005f1a70 fffff800`01ea6a38 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiBugCheckDispatch+0x6e 
fffffa60`005f1bb0 fffff800`01ee1678 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiDoubleFaultAbort+0xb8 (TrapFrame @ fffffa60`005f1bb0) 
fffffa60`087b3c90 fffff800`01ea82a9 : fffffa60`087b43c8 00000000`00000001 fffffa60`087b4470 00000000`0000023b : nt!KiDispatchException+0x34 
fffffa60`087b4290 fffff800`01ea70a5 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000001 : nt!KiExceptionDispatch+0xa9 
fffffa60`087b4470 fffff800`01ed0150 : fffffa60`087b5498 fffffa60`087b4e70 fffff800`01f95190 fffff800`01e4e000 : nt!KiPageFault+0x1e5 (TrapFrame @ fffffa60`087b4470) 
fffffa60`087b4600 fffff800`01ed3f78 : fffffa60`00000001 00000000`00000000 00000000`00000000 ffffffff`ffffff88 : nt!RtlVirtualUnwind+0x250 
fffffa60`087b4670 fffff800`01ee1706 : fffffa60`087b5498 fffffa60`087b4e70 fffffa60`00000000 00000000`00000000 : nt!RtlDispatchException+0x118 
fffffa60`087b4d60 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiDispatchException+0xc2 

答えて

1

windbgのヘルプファイルは、さまざまなカーネルモードのバグチェックとその対処方法についてさらに詳しく説明しています。あなたの専門知識のレベルやここで期待していることは本当にわかりませんが、一般的には、デルファイのようなユーザーモードプログラムでは何もできないことが、バグチェックを引き起こします。したがって、私たちは通常、ドライバのバグや何らかのハードウェアの故障を前提にしています。

私は、ヘルプインデックスにUNEXPECTED_KERNEL_MODE_TRAPを入力し、このページを得た:

のWindowsドライバキット: UNEXPECTED_KERNEL_MODE_TRAP UNEXPECTED_KERNEL_MODE_TRAPのバグチェック が0x0000007Fの値を持っている:デバッグツール バグ0x7Fのを確認してください。このバグ は、インテルCPU がトラップを生成し、カーネルが がこのトラップを捕捉できなかったことを示します。

このトラップは、バウンドトラップ(カーネルが キャッチに許可されていない トラップ)または二重障害(常に システム障害になり、以前の 障害を、処理中に が発生したことを障害)可能性があり。省略さ

...

0x00000008、またはダブルフォルト、例外が前の例外のハンドラの呼び出し 中に発生していることを示している 。 通常、2つの例外は が連続して処理されます。しかしながら、 があり、 を連続して処理することができないいくつかの例外があり、この 状況では、プロセッサは 二重障害を通知します。ダブルフォルトの原因は2つあります。

Aカーネル スタックオーバーフローです。このオーバーフローは、ガードページがヒットしたときに となり、カーネル がトラップフレームをプッシュしようとしたときに発生します。 スタックが残っていないため、 スタックオーバーフローが発生し、 二重障害が発生します。この の概要が考えられたら、!threadを に設定してスタック制限を決定してから、 大きなパラメータ(たとえば、kb 100)を使用してkb(Display Stack Backtrace)を使用してスタック全体を表示します。

ハードウェアの問題です。

原因バグは0x7Fのは、一般的にあなたが故障したり 不一致ハードウェア(特に メモリ)をインストールした後 を発生するか、インストールされたハードウェア が失敗したかどうかを確認します。

カーネルスタックがオーバーフローすると、二重障害が発生する可能性があります。このオーバーフロー は、複数のドライバが同じスタックに接続された である場合に発生します。 の例では、2つのファイルシステムフィルタ のドライバが同じスタックに接続されている場合は、 ファイルシステムが再び に戻ると、スタックがオーバーフローします。省略さ

...

それはそれについて多くの詳細に点灯し、さまざまなデバッグ技術と何が問題のトラブルシューティングを行うことができます。

+0

私は印象に残っていましたが、ユーザーモードアプリケーションではBSODを発生させることはできませんでしたが、確かではありませんでしたが、同じ時点でDelphi 2009とまったく同じことが起こったのはあまりにも偶然のようでした複数の再起動後にアプリ内で、メモリはちょうど適切な場所にあったはずです。私は、Vistaの64ビットはアドレスのランダム化を持っていたと思った。とにかく、そのマシン上のメモリが故障していることが判明しました(MS「Windows Memory Diagnostic」とMemTest86 +でテスト済み) – Bruce

+0

上記の説明は正しくなく、MSDNも間違っています。カーネルスタックは無効なページで保護されているため、ページ上の無効なアドレスをヒットすると、プロセッサはページフォルトを生成し、レジスタをプッシュしようとし、2番目のページフォルトを取得しようとします。 " 手段。 – steve

関連する問題