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;!分析-v;r;kv;lmnt;.logclose;q
加载内核符号
..................................................... ......
..................................................... .....................
…………………………………………………………………………………………………………
加载用户符号
加载卸载的模块列表
...........
****************************************************** *****************************
* *
*错误检查分析*
* *
****************************************************** *****************************

UNEXPECTED_KERNEL_MODE_TRAP (7f)
这意味着在内核模式中发生了一个陷阱,它是一种陷阱
不允许内核拥有/捕获(绑定陷阱)或
总是立即死亡(双重错误)。中的第一个数字
bugcheck 参数是陷阱的数量(8 = 双重错误等)
请查阅 Intel x86 系列手册以了解有关这些内容的更多信息
陷阱是。这是这些代码的*部分*:
如果 kv 显示 taskGate
        在冒号之前的部分使用 .tss,然后是 kv。
否则,如果 kv 显示陷阱框
        在该值上使用 .trap
别的
        .trap 在适当的框架上将显示陷阱的位置
        (在 x86 上,这将是 KiTrap 程序附带的 ebp)
万一
然后 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

当前_IRQL:1

异常记录:fffffa60087b43c8 -- (.exr 0xfffffa60087b43c8)
.exr 0xfffffa60087b43c8
异常地址:fffff80001ed0150 (nt!RtlVirtualUnwind+0x0000000000000250)
   异常代码:10000004
  异常标志:00000000
数量参数:2
   参数[0]:0000000000000000
   参数[1]:00000000000000d8

TRAP_FRAME: fffffa60087b4470 -- (.trap 0xfffffa60087b4470)
.trap 0xfffffa60087b4470
注意:陷阱帧不包含所有寄存器。
某些寄存器值可能为零或不正确。
rax=0000000000000050 rbx=0000000000000000 rcx=0000000000000004
rdx=00000000000000d8 rsi=0000000000000000 rdi=0000000000000000
撕裂=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

堆栈文本:  
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


堆栈命令:kb

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

SYMBOL_STACK_INDEX:2

SYMBOL_NAME: nt!KiDoubleFaultAbort+b8

FOLLOWUP_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
撕裂=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 : 调用站点
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 (Trapf1) @fffffa6
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 驱动程序工具包:调试工具错误检查 0x7F:UNEXPECTED_KERNEL_MODE_TRAP UNEXPECTED_KERNEL_MODE_TRAP 错误检查的值为 0x0000007F。此错误检查表明 Intel CPU 生成了一个陷阱,而内核未能捕获此陷阱。

此陷阱可能是绑定陷阱(不允许内核捕获的陷阱)或双重故障(在处理较早故障时发生的故障,总是导致系统故障)。

省略...

0x00000008 或 Double Fault 表示在调用先前异常的处理程序期间发生异常。通常,这两个异常是串行处理的。但是,有几个异常不能串行处理,在这种情况下,处理器会发出双重故障信号。双重故障有两个常见的原因:

内核堆栈溢出。当一个保护页面被命中并且内核试图推送一个陷阱帧时,就会发生这种溢出。由于没有剩余堆栈,导致堆栈溢出,导致双重故障。如果您认为出现了这种概述,请使用 !thread 确定堆栈限制,然后使用带有大参数(例如 kb 100)的 kb(显示堆栈回溯)来显示完整堆栈。

硬件问题。

原因 错误检查 0x7F 通常发生在您安装有故障或不匹配的硬件(尤其是内存)之后,或者如果安装的硬件出现故障。

当内核堆栈溢出时,可能会发生双重错误。如果多个驱动程序附加到同一个堆栈,则会发生此溢出。例如,如果两个文件系统过滤器驱动程序附加到同一个堆栈,然后文件系统递归返回,堆栈溢出。

省略...

它进一步详细介绍了这一点,以及各种调试技术以及您可以采取哪些措施来解决问题。

于 2009-08-04T03:06:53.980 回答