前言

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就是符号表。

这些符号表,程序运行过程中没啥用,但是调试的时候有用,这里面主要记录了下面这些东西。

  1. 全局变量
  2. 局部变量
  3. 函数名以及他们实体指针的地址
  4. 帧指针表
  5. 源代码行数

调试时,必须知道调试器能够获取与调试目标相匹配的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(一般调试不需要源文件)

接着就可以输入调试命令进行输入了,例如:

  1. bu HelloWorld!main

意思是在HelloWorld的main模块处设置断点

  1. g

开始运行程序

  1. 按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。

其他命令:

  1. bu notepad!WinMain 设置断点
  2. bl 显示已经设置的断点信息
  3. g 运行程序直到断点、崩溃或程序结束
  4. lm 显示notepad程序已经加载的模块
  5. k显示当前线程的堆栈轨迹,即函数调用结构表
  6. g 继续运行
  7. 按菜单栏的stop按钮停止调试
  8. bu ntdll!ZwWriteFile 设置新的断点
  9. bl 显示断点信息
  10. ~ 查看当前程序的所有线程
  11. ~0s

k

以上两个命令可以进入0好进程,并查看堆栈轨迹

  1. qd退出调试

Windows下调试工具Windbg入门相关推荐

  1. Windows下FFmpeg高速入门

    本系列文章导航 Windows下FFmpeg高速入门 ffmpeg參数解释 mencoder和ffmpeg參数具体解释(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进 ...

  2. Windows下使用Windbg处理Qt崩溃转储dmp

    目录 1.简介 2.开发环境 3.生成dump文件 3.1修改注册表(方式1) 3.2修改注册表(方式2) 3.3修改代码,设置回调函数(方式3) 4.修改pro文件 5.生成pdb 5.1下载cv2 ...

  3. windows下shellcode编写入门

    0x00.介绍 比方说你手头上有一个IE或FlashPlayer现成的漏洞利用代码,但它只能够打开计算器calc.exe.但是这实际上并没有什么卵用,不是吗?你真正想要的是可以执行一些远程命令或实现其 ...

  4. 在Windows下使用webpack入门

    https://blog.csdn.net/ganyingxie123456/article/details/70176401

  5. 【WINDOWS系统】WinDbg调试工具

    一.Windows 10 调试工具 (WinDbg)的安装 1.下载地址https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugg ...

  6. windows下nodejs express安装及入门网站,视频资料,开源项目介绍

    windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件 下载地址 ...

  7. windows下Graphviz安装及入门教程

    下载安装配置环境变量 intall 配置环境变量 验证 基本绘图入门 graph digraph 一个复杂的例子 和python交互 发现好的工具,如同发现新大陆.有时,我们会好奇,论文中.各种专业的 ...

  8. Flex和Bison简介和Windows下使用入门

    flex用作词法分析,而bison用作语法分析.词法分析把输入分解成一个个有意义的词块,称作token:语法分析则确定这些词块彼此之间如何关联(使用语法树表达). Flex可生成词法分析器:Bison ...

  9. ElasticSearch入门 第一篇:Windows下安装ElasticSearch

    这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  10. ElasticSearch入门 :Windows下安装ElasticSearch

    这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

最新文章

  1. K12(在线学习的平台)
  2. 控制反转(Ioc)和依赖注入(DI)
  3. P2801-教主的魔法【分块,二分】
  4. [pytorch] Pytorch入门
  5. 【转】asp仿百度文库、豆丁doc转换(flashpaper)
  6. oracle operation_type,oracle静默安装
  7. JAVA练习173-幂集
  8. 芒果魔兽世界单机没法运行服务器,大芒果魔兽世界单机版局域网联机方法
  9. 纵向时间线html,51个css时间轴
  10. Blog Management System Based on JSP(基于JSP的实验室设备管理系统的开发)外文翻译
  11. php 汉王云名片_利用PHP自动生成印有用户信息的名片
  12. JavaScript ( 预解析 )
  13. uni-app -- 改变页面背景颜色
  14. 什么命令能查看服务器的型号,查看服务器型号的命令
  15. php关键词回复源码,PHP对接公众号搜索自动回复源码
  16. Win10任务栏显示窗口不折叠的设置方法
  17. 【AtCoder】【思维】【图论】Splatter Painting(AGC012)
  18. 数据表中常见的数据类型
  19. c++ windows 蓝牙库_c++中蓝牙编程的库类
  20. 使用Java实现Comet风格的Web应用(二)

热门文章

  1. epicor数据表增加字段
  2. Android系统预装Chrome并自定义主页
  3. Java实现Word转PDF【完整版】
  4. 实体认证与身份识别概述
  5. 搞技术的人生技巧——装贪财
  6. 哪些短信平台能发国际短信?
  7. BZOJ2794 Cloakroom【有限制的背包问题】
  8. [转载]W3C XML Schema 与文档类型定义
  9. 开源项目学习之(一)------zheng环境搭建
  10. WebLogic 性能监控