2009-08-04 44 views
0

我有一個應用程序,我已經轉換爲Delphi 2009我有「字符串格式檢查」和標準內存管理器。我在http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx下載了MS調試工具,並獲得了一些調試文件,但我不知道該怎麼做。我想從這裏走一些指示。下面是調試文件的頂部(底部加載了所有驅動程序);運行Delphi 2009應用程序時Vista 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的幫助文件詳細介紹了各種內核模式錯誤檢查以及如何處理它們。我並不真正瞭解您的專業水平或您在此期待的內容,但一般而言,在用戶模式程序(如delphi)中不會做任何事情都會導致錯誤檢查。因此,我們通常會假設驅動程序錯誤或某種硬件故障。

我進入UNEXPECTED_KERNEL_MODE_TRAP到幫助索引和得到這個頁面:

驅動程序開發工具包:調試工具 錯誤檢查0x7F的: UNEXPECTED_KERNEL_MODE_TRAP的 UNEXPECTED_KERNEL_MODE_TRAP錯誤檢查 具有0x0000007F的值。此錯誤 檢查表明英特爾CPU 生成陷阱並且內核失敗 捕獲此陷阱。

該陷阱可以是結合的捕集器(在處理的早期 故障,這總是導致 系統故障的故障即 發生)(一個 陷阱內核不允許 捕獲)或雙故障。

省略掉......

0x00000008,或雙重故障,表明 一個呼叫 來的處理程序之前異常期間發生異常。 通常,連續處理兩個例外是 。但是,有幾個例外,不能連續處理 ,並且在此 情況下,處理器發出 雙重故障。有兩種常見的 引起的雙重故障:

內核 堆棧溢出。當一個保護頁被命中, 內核嘗試推送一個陷阱幀時,發生此溢出 。 由於沒有堆棧, 堆棧溢出結果,導致 雙重故障。如果你認爲這個 概述已經發生,使用!線程到 確定堆棧限制,然後用 一個大的參數(例如,kb 100)顯示完整的堆棧使用kb(Display Stack Backtrace)。

A 硬件問題。

原因錯誤檢查0x7F的,通常會出現 安裝故障或 不匹配的硬件(尤其是內存 )後或安裝硬件 失敗。

內核堆棧溢出時可能會發生雙重故障。如果連接到同一堆棧的多個驅動程序是 ,則會發生此溢出 。例如,對於 示例,如果兩個文件系統過濾器 驅動程序連接到同一個堆棧 ,然後文件系統遞歸返回 ,堆棧會溢出。

省略掉......

它繼續成左右,很多更詳細的,以及各種調試技術,什麼可以做,以解決該問題。

+0

感謝你們,我的印象是,用戶模式應用程序不能導致BSOD,但不是很確定,它似乎是一個巧合,它只發生在德爾福2009年在同一點在多次重啓後的應用程序中,但內存必須恰到好處。我認爲Vista 64位有地址隨機化。無論如何,事實證明,該機器上的內存出現故障(用MS「Windows Memory Diagnostic」和MemTest86 +進行測試。再次感謝 – Bruce 2009-08-04 23:22:59

相關問題