0

Delphi 2009に変換したアプリケーションがあり、「文字列形式のチェック」がオンになっていて、標準のメモリマネージャがあります。http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspxでMSデバッグツールをダウンロードし、いくつかのデバッグファイルを取得しましたが、それらをどうすればよいかわかりません。ここからどこへ行くべきかについてのいくつかの指針が欲しいです。以下はデバッグファイルの上部です(下部にはすべてのドライバーがロードされています)。

開いたログファイル'c:\ debuglog.txt'
1:kd> .sympath srv * c:\ symbols * http://msdl.microsoft.com/downloads/symbols
シンボル検索パスは次のとおりです。srv*c:\ symbols * http://msdl.microsoft.com/downloads/symbols
拡張されたシンボル検索パスは次のとおりです。srv*c:\ symbols * http://msdl.microsoft.com/downloads/symbols
1:kd> .reload;!analyze -v; r; kv; lmnt; .logclose; q
カーネルシンボルのロード
.................................................。 ............。
.................................................。 .............。
........................。
ユーザーシンボルの読み込み
アンロードされたモジュールリストのロード
.......。
************************************************** *****************************
**
*バグチェック分析*
**
************************************************** *****************************

UNEXPECTED_KERNEL_MODE_TRAP(7f)
これは、カーネルモードでトラップが発生したことを意味し、一種のトラップです。
カーネルが持つ/キャッチ(バインドされたトラップ)を許可されていないこと、または
常に即死(二重の過失)です。の最初の番号
バグチェックパラメータはトラップの数です(8 =二重障害など)
これらの詳細については、Intelx86ファミリのマニュアルを参照してください。
トラップがあります。これらのコードの*一部*は次のとおりです。
kvがtaskGateを表示する場合
        コロンの前の部分で.tssを使用し、次にkvを使用します。
それ以外の場合、kvがトラップフレームを示している場合
        その値に.trapを使用します
そうしないと
        適切なフレームの.trapは、トラップが取得された場所を示します
        (x86では、これはKiTrapの手順に伴うebpになります)
Endif
kbは修正されたスタックを表示します。
引数:
Arg1:0000000000000008、EXCEPTION_DOUBLE_FAULT
Arg2:0000000080050033
Arg3:00000000000006f8
Arg4:fffff80001ee1678

デバッグの詳細:
------------------


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
   パラメータ[0]:0000000000000000
   パラメータ[1]:00000000000000d8

TRAP_FRAME:fffffa60087b4470-(.trap 0xfffffa60087b4470)
.trap 0xfffffa60087b4470
注:トラップフレームには、すべてのレジスタが含まれているわけではありません。
一部のレジスタ値はゼロまたは正しくない可能性があります。
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 = ????????????????
。トラップ
デフォルトスコープのリセット

LAST_CONTROL_TRANSFER:fffff80001ea81eeから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

フォローアップ: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
4

1 に答える 1

1

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

UNEXPECTED_KERNEL_MODE_TRAPヘルプインデックスを入力して、次のページを取得しました。

Windows Driver Kit:デバッグツールバグチェック0x7F:UNEXPECTED_KERNEL_MODE_TRAPUNEXPECTED_KERNEL_MODE_TRAPバグチェックの値は0x0000007Fです。このバグチェックは、Intel CPUがトラップを生成し、カーネルがこのトラップをキャッチできなかったことを示しています。

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

省略...

0x00000008、またはDouble Faultは、前の例外のハンドラーの呼び出し中に例外が発生したことを示します。通常、2つの例外はシリアルに処理されます。ただし、シリアルに処理できないいくつかの例外があり、この状況では、プロセッサは二重障害を通知します。二重障害の一般的な原因は2つあります。

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

ハードウェアの問題。

原因バグチェック0x7Fは通常、障害のあるハードウェアまたは不一致のハードウェア(特にメモリ)をインストールした後、またはインストールされたハードウェアに障害が発生した場合に発生します。

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

省略...

それについて、さらに詳細に説明し、さまざまなデバッグ手法と、問題のトラブルシューティングを行うためにできることについて説明します。

于 2009-08-04T03:06:53.980 に答える