概述
文章目录
- 1、示例
- 分析步骤
- 1、转储dmp文件
- 2、使用WinDbg打开dmp文件
- 3、!analyze -v
1、示例
这个只用作说明,因此代码简单
// TestDmp.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
typedef struct _TEST_INFO_
{
CString strAlarm;
int nCount;
_TEST_INFO_()
{
strAlarm = L"";
nCount = 0;
}
}TEST_INFO, *PTEST_INFO;
int _tmain(int argc, _TCHAR* argv[])
{
PTEST_INFO pTest = NULL;
CString strAlarm = pTest->strAlarm;
system("pause");
return 0;
}
分析步骤
这里主要是讲不能调试的情况(毕竟示例这么简单,调试都可不用就看出问题)
1、转储dmp文件
在进程还没有退出的情况下,在任务管理器右键进程名——创建转储文件即可
2、使用WinDbg打开dmp文件
使用WinDbg打开1中保存的dmp文件,设置一下富豪路径和源代码路径(不设置也行,测试也是可以的)
3、!analyze -v
如果出现以下问题:
执行以下命令切换为32位模式:
0:000:x86> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
*** The OS name list needs to be updated! Unknown Windows version: 10.0 ***
GetUrlPageData2 (WinHttp) failed: 12002.
FAULTING_IP:
+c40
00000000 ?? ???
EXCEPTION_RECORD: ffffffffffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 0000000000000000
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 0
CONTEXT: 0000000000000000 -- (.cxr 0x0;r)
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=00000003 edi=00000003
eip=77db32fc esp=00fdeec0 ebp=00fdf050 iopl=0 nv up ei pl nz ac pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000216
ntdll_77d40000!NtWaitForMultipleObjects+0xc:
77db32fc c21400 ret 14h
FAULTING_THREAD: 0000000000001cfc
PROCESS_NAME: TestDmp.exe
ERROR_CODE: (NTSTATUS) 0x80000003 - {
EXCEPTION_CODE: (NTSTATUS) 0x80000003 (2147483651) - {
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
APP: testdmp.exe
ANALYSIS_VERSION: 6.3.9600.17237 (debuggers(dbg).140716-0327) amd64fre
BUGCHECK_STR: APPLICATION_FAULT_STATUS_BREAKPOINT_ZEROED_STACK
PRIMARY_PROBLEM_CLASS: STATUS_BREAKPOINT
DEFAULT_BUCKET_ID: STATUS_BREAKPOINT
LAST_CONTROL_TRANSFER: from 0000000077bc7ef3 to 0000000077db32fc
STACK_TEXT:
00fdeebc 77bc7ef3 00000003 00fdf0f0 00000001 ntdll_77d40000!NtWaitForMultipleObjects+0xc
00fdf050 77bc7da8 00000003 00fdf0f0 00000000 KERNELBASE!WaitForMultipleObjectsEx+0x133
00fdf06c 77816967 00000003 00fdf0f0 00000000 KERNELBASE!WaitForMultipleObjects+0x18
00fdf118 77816598 00000000 00000000 00fdf20c kernel32!WerpReportFaultInternal+0x3b7
00fdf134 777ec299 00fdf1dc 77c7ce6b 00fdf20c kernel32!WerpReportFault+0x9d
00fdf13c 77c7ce6b 00fdf20c 00000001 20e385f0 kernel32!BasepReportFault+0x19
00fdf1dc 77de287e 00fdf20c 77db72f2 00fdf970 KERNELBASE!UnhandledExceptionFilter+0x29b
00fdf970 77da8774 ffffffff 77dca139 00000000 ntdll_77d40000!__RtlUserThreadStart+0x3a109
00fdf980 00000000 00bb161d 011da000 00000000 ntdll_77d40000!_RtlUserThreadStart+0x1b
STACK_COMMAND: ~0s; .ecxr ; kb
FOLLOWUP_IP:
ntdll_77d40000!NtWaitForMultipleObjects+c
77db32fc c21400 ret 14h
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: ntdll!NtWaitForMultipleObjects+c
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: ntdll_77d40000
IMAGE_NAME: ntdll.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 47d68d20
FAILURE_BUCKET_ID: STATUS_BREAKPOINT_80000003_ntdll.dll!NtWaitForMultipleObjects
BUCKET_ID: APPLICATION_FAULT_STATUS_BREAKPOINT_ZEROED_STACK_ntdll!NtWaitForMultipleObjects+c
ANALYSIS_SOURCE: UM
FAILURE_ID_HASH_STRING: um:status_breakpoint_80000003_ntdll.dll!ntwaitformultipleobjects
FAILURE_ID_HASH: {ad4c05a5-d4e5-24d8-5d7e-ae3c60766b85}
Followup: MachineOwner
---------
运行一下~0s; .ecxr ; kb
好像啥也没有~~~~~
这个时候怎么办呢?没办法了吗?当然不是啦,接下来我们可以找一下有没有 KERNELBASE!UnhandledExceptionFilter 这个调用(很明显,上面第7行就是,如果没有,就执行~*kbn看看吧)
运行一下dd 00fdf20c
在运行一下 .exr 00fdf34c
再运行一下 .cxr 00fdf39c
这个时候就会跳转到出错的地方了
执行一下kbn,这个时候我们就看到了出问题的行了
这个时候可以打开call stack窗口,双击TestDmp!wmain+0x19
行,或者输入.frame 3,之后打开locals窗口
可知,非法使用指针了。
最后
以上就是傲娇未来为你收集整理的windbg分析崩溃dmp没有可用信息的处理的全部内容,希望文章能够帮你解决windbg分析崩溃dmp没有可用信息的处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复