Windows 7 Windbg崩溃转储分析
我很难从我用ProcDump创建的崩溃转储中获得任何有意义的信息,但我很确定这与我经历的一次看似随机的崩溃有关 我有一个VB6应用程序在64位Windows 7上运行。每隔一段时间,它就会崩溃,在错误日志中留下一个条目,该条目会对ntdll.dll进行故障诊断,但不会提供更多信息。因此,我一直在运行SysInternals的ProcDump来自动创建崩溃转储 我无法在内部重新创建崩溃,因此我非常确定,如果我有一个垃圾场,它会告诉我问题是什么。然而,在运行了一天的大部分时间后,我看到ProcDump已经编写了几个转储,尽管程序仍然运行良好。它似乎指向了ntdll.dll的问题,但我不知道从哪里开始应用修复程序 正在运行Windows 7 Windbg崩溃转储分析,windows-7,vb6,windbg,crash-dumps,procdump,Windows 7,Vb6,Windbg,Crash Dumps,Procdump,我很难从我用ProcDump创建的崩溃转储中获得任何有意义的信息,但我很确定这与我经历的一次看似随机的崩溃有关 我有一个VB6应用程序在64位Windows 7上运行。每隔一段时间,它就会崩溃,在错误日志中留下一个条目,该条目会对ntdll.dll进行故障诊断,但不会提供更多信息。因此,我一直在运行SysInternals的ProcDump来自动创建崩溃转储 我无法在内部重新创建崩溃,因此我非常确定,如果我有一个垃圾场,它会告诉我问题是什么。然而,在运行了一天的大部分时间后,我看到ProcDum
!其中一个转储上的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
有人能给我指出正确的方向,让我理解这个条目,以及我能做些什么吗?为了确保,我已经在我这边做了一些测试,附加到健康的流程,并对刚启动的流程进行了转储。 在所有情况下,输出!analyze-v与您的非常相似,只是我的版本更详细,我认为这取决于调试器的版本 例如,以下是我在附加到刚开始绘制后得到的输出:
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
GetPageUrlData failed, server returned HTTP status 404
URL requested: http://watson.microsoft.com/StageOne/mspaint_exe/6_1_7600_16385/4a5bca29/ntdll_dll/6_1_7601_17725/4ec4aa8e/80000003/00050530.htm?Retriage=1
FAULTING_IP:
ntdll!DbgBreakPoint+0
00000000`76d90530 cc int 3
EXCEPTION_RECORD: ffffffffffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 0000000076d90530 (ntdll!DbgBreakPoint)
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 1
Parameter[0]: 0000000000000000
FAULTING_THREAD: 0000000000000cbc
DEFAULT_BUCKET_ID: STATUS_BREAKPOINT
PROCESS_NAME: mspaint.exe
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached.
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid
EXCEPTION_PARAMETER1: 0000000000000000
MOD_LIST: <ANALYSIS/>
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
PRIMARY_PROBLEM_CLASS: STATUS_BREAKPOINT
BUGCHECK_STR: APPLICATION_FAULT_STATUS_BREAKPOINT
LAST_CONTROL_TRANSFER: from 0000000076e37ef8 to 0000000076d90530
STACK_TEXT:
FOLLOWUP_IP:
ntdll!DbgBreakPoint+0
00000000`76d90530 cc int 3
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: ntdll!DbgBreakPoint+0
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: ntdll
IMAGE_NAME: ntdll.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 4ec4aa8e
STACK_COMMAND: ~8s ; kb
FAILURE_BUCKET_ID: STATUS_BREAKPOINT_80000003_ntdll.dll!DbgBreakPoint
BUCKET_ID: X64_APPLICATION_FAULT_STATUS_BREAKPOINT_ntdll!DbgBreakPoint+0
WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/mspaint_exe/6_1_7600_16385/4a5bca29/ntdll_dll/6_1_7601_17725/4ec4aa8e/80000003/00050530.htm?Retriage=1
Followup: MachineOwner
---------
在每次出现挂起或异常的迹象时,您都会停止procdump,而不设置特定的参数,如内存使用数或CPU使用的procent
我建议使用DebugDiag,它提供了很好的UI,您可以在其中配置描述何时应该创建转储的规则。
下面是我的一个解释,当内存使用率过高或CPU使用率较高时,如何收集转储:
下面是另一个基于屏幕截图的详细说明,如何在DebugDiag中获取特定异常的转储:
从一组更轻量级的工具中,您还可以检查AdPlus工具(位于C:\Program Files\Debugging tools for Windows(x64)文件夹中)。我更喜欢DebugDiag,因为它允许捕获特定类型的异常。当procdump运行时,您在哪里调试此应用程序?调用后的
应用程序\u故障\u状态\u断点\u
似乎表明调试器闯入了进程,这就是procdump捕获的转储。因此,这些转储不会帮助您,因为它们不是实际问题的快照ProcDump
是一个非常轻量级的工具,您应该尝试在出现实际问题的地方运行它,然后尝试分析这些转储。当时我没有调试。我刚刚在生产机器上安装了ProcDump,并编写脚本使其在启动时运行(C:\apps\ProcDump.exe-accepteula-e-h-n 10-t-w application.exe C:\application.dmp)。所以基本上,我在编译的可执行文件旁边运行ProcDump,在转储出现时捕获它们。你的意思是这些转储基本上是由ProcDump引起的,所以我不需要担心它们?我试图捕捉的错误最终肯定会导致程序终止,所以如果它发生在字段中,那就是我想要得到的转储。我并不是说你不需要担心它们。这就是我的报告!analyze-v让我觉得这不是真正的崩溃,而是调试器中断。我会检查各个线程的调用堆栈,看看是否有其他异常。通过查看调用堆栈,我没有看到任何其他异常,因此我希望这是好的。感谢您的全面回答!
C:\apps\procdump.exe -accepteula -e -h -n 10 -t -w application.exe