我是靠谱客的博主 傲娇未来,最近开发中收集的这篇文章主要介绍windbg分析崩溃dmp没有可用信息的处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 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没有可用信息的处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部