WinDbg单机调试

一、引入

自己写一个会崩溃的程序进行测试,如下:

#include "stdafx.h"
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
	char* p = "who are you?";
	while(*p)
	{
		if (*p == 'y')
		{
			*p = '1';  //此处有问题
		}
		printf("%c\n", *p);
		++p;
	}
	system("pause");
	return 0;
}

编译之后执行该exe,发现程序崩溃了,如下:
在这里插入图片描述
虽然我们可以通过Windbg加载dmp文件分析是哪里出现了问题,但是在这里学习一种新的方法,用windbg调试进而分析文件。

二、步骤

1、获取相关文件

首先找到该exe和对应的pdb,如下
在这里插入图片描述

2、配置Windbg调试环境

1)设置pdb文件的位置

方法如下:
在这里插入图片描述
在这里插入图片描述
由上图,Symbol path支持输入多个路径(以分号分隔)
①SRVH:\MySysSymbols http://msdl.microsoft.com/download/symbols,让Windbg可以自动到Microsoft的服务器上下载符号表文件;
②H:\Project_Git\testProject\testCrash\Release,是testCrash.exe的pdb路径

2)设置源代码文件的位置

方法如下:
在这里插入图片描述
在这里插入图片描述

3)打开待调试的exe

方法如下:
在这里插入图片描述
在这里插入图片描述

4)设置断点

这里的测试程序可设置可不设置,因为代码不多,若需要设置,可以使用bp命令进行设置或者在windbg中打开源代码文件,鼠标定位到代码行,按下F9即可,如下:
在这里插入图片描述
红色行就是下了断点的行,为了确认,我们可以使用bl命令查看一下,如下:
在这里插入图片描述

5)重载一下符号

在这里插入图片描述

6)执行指令g

该指令将会在程序结束、遇到BreakAddress 或者其他造成调试器停止的事件发生时停止。如下:
在这里插入图片描述
红色部分:说明已经出现异常。
在本示例中执行g够同时弹出以下左边页面:源代码文件定位到某行代码(引起崩溃的代码行),右边页面是提示崩溃的原因
在这里插入图片描述
由图可知,说明了该程序崩溃的原因是“Access violation”,即非法访问。结合左边的代码可知,执行*p = '1’引起了非法访问导致该程序崩溃。
到这里,我们就定位到了程序崩溃的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值