gpt4 book ai didi

windows-7 - Windbg 故障转储分析

转载 作者:行者123 更新时间:2023-12-02 22:37:08 24 4
gpt4 key购买 nike

我很难从使用 ProcDump 创建的故障转储中获取任何有意义的信息,但我很确定它与我遇到的看似随机的崩溃有关。

我有一个在 Windows 7 64 位上运行的 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

任何人都可以为我指明正确的方向,让我理解这篇文章,以及我能做些什么吗?

最佳答案

为了确保安全,我已经执行了一些测试,附加到健康的进程并转储刚刚启动的进程。在所有情况下 !analyze -v 的输出与您的非常相似,除了我的输出更详细这一事实,我认为这取决于调试器版本。

例如,这是我附加到刚刚启动的 Paint 后得到的输出:

*******************************************************************************
* *
* 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 标志的解释:http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx 。看起来就像使用命令行一样

C:\apps\procdump.exe -accepteula -e -h -n 10 -t -w application.exe

您可以让 procdump 在出现任何挂起或异常迹象时停止,而无需设置特定参数,例如内存使用量或 CPU 使用率。

我建议使用 DebugDiag,它提供了漂亮的 UI,您可以在其中配置描述何时应创建转储的规则。这是我的解释,当您遇到内存使用过多问题或 CPU 使用率过高时如何收集转储:

http://kate-butenko.blogspot.com/2012/06/how-to-gather-dump-with-debugdiag.html

这是另一个基于屏幕截图的详细解释,如何在 DebugDiag 中获取特定异常的转储:

http://blogs.msdn.com/b/kaushal/archive/2012/05/09/using-debugdiag-to-capture-a-dump-on-first-chance-exception.aspx

从一组更轻量级的工具中,您还可以检查 AdPlus 工具(位于C:\Program Files\Debugging Tools for Windows (x64) 文件夹中)。我更喜欢 DebugDiag,因为它允许捕获特定类型的异常。

关于windows-7 - Windbg 故障转储分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11872539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com