Windows下调试工具Windbg入门
前言
Windbg简单来说就是一个Windows下对用户态/内核态的程序进行调试,以及对Core Dump文件的分析。对于Crash,资源泄露,死锁等问题的分析,Windbg是一个强有力的利器。
一、下载
微软官网提供的Windbg为windows10版本,win7下不能使用。Win7下使用Windbg需要通过Windows SDK下载,下载链接为//www.microsoft.com/downloads/en/details.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b&displaylang=en
- 安装
如果对windows SDK的其他内容不感兴趣,可只勾选Windbg.
安装完成后便可以在Windows开始菜单栏中找到Windbg.
安装可能会失败,如果失败的话可以到控“制面板\程序\程序和功能“中将 Microsoft Visual C++ 2010 Redistributable卸载,即可安装成功。
二、Windows 调试中的符号表
1.关于符号表
符号表,对于vs用户来说,符号表就是vs生成的.pdb文件,比如你写了个helloword,一般会生成一个helloword.exe是执行程序,helloword.pdb就是符号表。
这些符号表,程序运行过程中没啥用,但是调试的时候有用,这里面主要记录了下面这些东西。
- 全局变量
- 局部变量
- 函数名以及他们实体指针的地址
- 帧指针表
- 源代码行数
调试时,必须知道调试器能够获取与调试目标相匹配的symbol files,在线调试和调试crash dump files都需要symbols。
Windows以后缀名pdb保存symbols,vs将所有symbols保存在pdb文件中。
三、调试入门
1、断点和单步调试
这个功能一般也不会用windbg来做,一般都是在开发自测过程汇总用vs来调试的,毕竟用vs方便些。
假设你已经编写如下程序
void MyFunction(long p1, long p2, long p3){long x = p1 + p2 + p3;long y = 0;y = x / p2;}void main(){long a = 2;long b = 0;MyFunction(a, b, 5);}
(1)用Visual studio 2015在x64、debug模式下生成一个Helloworld.exe,同时生成一个Helloworld.pdb。
(2)配置符号表
如下图,就是把你的pdb文件所在的文件夹路径,拷贝过来设置一下就好了。
(3)用windbg打开Helloworld.exe和Helloworld.cpp(一般调试不需要源文件)
接着就可以输入调试命令进行输入了,例如:
- bu HelloWorld!main
意思是在HelloWorld的main模块处设置断点
- g
开始运行程序
- 按F11进行单步调试,直到程序运行到y = x / p2将会崩溃,输出错误信息,类似这样:
(3058.3830): Integer divide-by-zero - code c0000094 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
HelloWorld!MyFunction+0x53:
00000001`3f2a16d3 f7bd28010000 idiv eax,dword ptr [rbp+128h] ss:00000000`0014f648=00000000
是说发生了0除错误。
(4)!analyze -v
将会生成一堆对错误的分析。
2、调试崩溃
适用于以下场景:你的程序开发好了,在本地运行好好的,但是部署到服务器上了,崩溃了,或偶现崩溃,比较容易复现。
3、调试dump
适用于以下场景:你的程序开发好了,部署到服务器上了,偶现崩溃,产生了dump,很难复现。所以只能分析dump。
其他命令:
- bu notepad!WinMain 设置断点
- bl 显示已经设置的断点信息
- g 运行程序直到断点、崩溃或程序结束
- lm 显示notepad程序已经加载的模块
- k显示当前线程的堆栈轨迹,即函数调用结构表
- g 继续运行
- 按菜单栏的stop按钮停止调试
- bu ntdll!ZwWriteFile 设置新的断点
- bl 显示断点信息
- ~ 查看当前程序的所有线程
- ~0s
k
以上两个命令可以进入0好进程,并查看堆栈轨迹
- qd退出调试
Windows下调试工具Windbg入门相关推荐
- Windows下FFmpeg高速入门
本系列文章导航 Windows下FFmpeg高速入门 ffmpeg參数解释 mencoder和ffmpeg參数具体解释(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进 ...
- Windows下使用Windbg处理Qt崩溃转储dmp
目录 1.简介 2.开发环境 3.生成dump文件 3.1修改注册表(方式1) 3.2修改注册表(方式2) 3.3修改代码,设置回调函数(方式3) 4.修改pro文件 5.生成pdb 5.1下载cv2 ...
- windows下shellcode编写入门
0x00.介绍 比方说你手头上有一个IE或FlashPlayer现成的漏洞利用代码,但它只能够打开计算器calc.exe.但是这实际上并没有什么卵用,不是吗?你真正想要的是可以执行一些远程命令或实现其 ...
- 在Windows下使用webpack入门
https://blog.csdn.net/ganyingxie123456/article/details/70176401
- 【WINDOWS系统】WinDbg调试工具
一.Windows 10 调试工具 (WinDbg)的安装 1.下载地址https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugg ...
- windows下nodejs express安装及入门网站,视频资料,开源项目介绍
windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件 下载地址 ...
- windows下Graphviz安装及入门教程
下载安装配置环境变量 intall 配置环境变量 验证 基本绘图入门 graph digraph 一个复杂的例子 和python交互 发现好的工具,如同发现新大陆.有时,我们会好奇,论文中.各种专业的 ...
- Flex和Bison简介和Windows下使用入门
flex用作词法分析,而bison用作语法分析.词法分析把输入分解成一个个有意义的词块,称作token:语法分析则确定这些词块彼此之间如何关联(使用语法树表达). Flex可生成词法分析器:Bison ...
- ElasticSearch入门 第一篇:Windows下安装ElasticSearch
这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- ElasticSearch入门 :Windows下安装ElasticSearch
这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
最新文章
- K12(在线学习的平台)
- 控制反转(Ioc)和依赖注入(DI)
- P2801-教主的魔法【分块,二分】
- [pytorch] Pytorch入门
- 【转】asp仿百度文库、豆丁doc转换(flashpaper)
- oracle operation_type,oracle静默安装
- JAVA练习173-幂集
- 芒果魔兽世界单机没法运行服务器,大芒果魔兽世界单机版局域网联机方法
- 纵向时间线html,51个css时间轴
- Blog Management System Based on JSP(基于JSP的实验室设备管理系统的开发)外文翻译
- php 汉王云名片_利用PHP自动生成印有用户信息的名片
- JavaScript ( 预解析 )
- uni-app -- 改变页面背景颜色
- 什么命令能查看服务器的型号,查看服务器型号的命令
- php关键词回复源码,PHP对接公众号搜索自动回复源码
- Win10任务栏显示窗口不折叠的设置方法
- 【AtCoder】【思维】【图论】Splatter Painting(AGC012)
- 数据表中常见的数据类型
- c++ windows 蓝牙库_c++中蓝牙编程的库类
- 使用Java实现Comet风格的Web应用(二)