【发布时间】:2012-08-08 20:21:26
【问题描述】:
我很难从使用 ProcDump 创建的崩溃转储中获取任何有意义的信息,但我很确定这与我遇到的看似随机的崩溃有关。
我有一个在 64 位 Windows 7 上运行的 VB6 应用程序。每隔一段时间,它就会崩溃,在错误日志中留下一个条目,该条目导致 ntdll.dll 出错,但没有提供更多信息。因此,我一直在运行 SysInternals 的 ProcDump 来自动为我创建故障转储。
我无法在内部重新创建崩溃,所以我很确定如果我有一个转储,它会告诉我问题是什么。但是,在运行了一天的大部分时间后,我看到 ProcDump 已经写了几个转储,尽管程序仍然运行良好。它似乎确实指出了 ntdll.dll 的问题,但我不知道从哪里开始对此进行修复。
在其中一个转储上运行 !analyze -v 会给我以下信息:
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
FAULTING_IP:
+0
00000000 ?? ???
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00000000
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 0
FAULTING_THREAD: 000007c8
PROCESS_NAME: application.exe
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached.
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
APP: application.exe
BUGCHECK_STR: APPLICATION_FAULT_STATUS_BREAKPOINT_AFTER_CALL
PRIMARY_PROBLEM_CLASS: STATUS_BREAKPOINT_AFTER_CALL
DEFAULT_BUCKET_ID: STATUS_BREAKPOINT_AFTER_CALL
LAST_CONTROL_TRANSFER: from 7754431f to 7752014d
STACK_TEXT:
0382fdf4 7754431f 00000005 035e62c8 00000001 ntdll!ZwWaitForMultipleObjects+0x15
0382ff88 74cd339a 00000000 0382ffd4 77539ed2 ntdll!TppWaiterpThread+0x33d
0382ff94 77539ed2 035e6298 74e2a30c 00000000 kernel32!BaseThreadInitThunk+0xe
0382ffd4 77539ea5 775441f3 035e6298 00000000 ntdll!__RtlUserThreadStart+0x70
0382ffec 00000000 775441f3 035e6298 00000000 ntdll!_RtlUserThreadStart+0x1b
STACK_COMMAND: ~0s; .ecxr ; kb
FOLLOWUP_IP:
ntdll!ZwWaitForMultipleObjects+15
7752014d 83c404 add esp,4
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: ntdll!ZwWaitForMultipleObjects+15
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: ntdll
IMAGE_NAME: ntdll.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 4ce7ba58
FAILURE_BUCKET_ID: STATUS_BREAKPOINT_AFTER_CALL_80000003_ntdll.dll!ZwWaitForMultipleObjects
BUCKET_ID: APPLICATION_FAULT_STATUS_BREAKPOINT_AFTER_CALL_ntdll!ZwWaitForMultipleObjects+15
WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/BlackJack_exe/1_5_0_0/50227d4e/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1
Followup: MachineOwner
谁能指出我正确的方向,让我理解这个条目,我能做些什么?
【问题讨论】:
-
您在 procdump 运行时在哪里调试此应用程序?
APPLICATION_FAULT_STATUS_BREAKPOINT_AFTER_CALL似乎表明调试器闯入了进程,这就是 procdump 捕获的转储。因此,这些转储不会对您有所帮助,因为它们不是实际问题的快照。ProcDump是一个非常轻量级的工具,您应该尝试在实际问题发生的地方运行它,然后尝试分析这些转储。 -
我当时没有调试。我刚刚在生产机器上就地安装了 ProcDump,在启动时编写了脚本以运行 (C:\apps\procdump.exe -accepteula -e -h -n 10 -t -w application.exe C:\application.dmp) .所以基本上,我在我们编译的可执行文件旁边运行 ProcDump,在转储出现时捕获它们。所以你说的是这些转储基本上是由 ProcDump 引起的,所以我不需要担心它们?我最想捕捉的错误肯定会在程序终止时结束,所以如果它发生在现场,这就是我想要得到的转储。
-
我并不是说你不需要担心它们。只是 !analyze -v 的报告让我认为这些不是实际的崩溃,而是调试器中断。我会检查各个线程的调用堆栈,看看某处是否还有其他异常。
-
我通过查看调用堆栈没有看到任何其他异常,所以我希望这很好。
标签: windows-7 vb6 windbg crash-dumps procdump