Windbg使用说明书

2023-05-16

Windbg使用说明书

Windbg使用说明书 - 简书 (jianshu.com)

术语、缩略语

windbg 

windows平台下,强大的用户态和内核态调试工具。

dmp

内存映像文件,一般是系统错误产生的文件。

Pdb

程序数据库文件。

Symbol

符号文件(Symbol Files)是一个数据信息文件,它包含了应用程序二进制文件(比如:EXE、DLL等)调试信息


概述

Windbg是Windows平台下强大的工具。相比较于Visual Studio,它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能,却比VS更为强大。它的另外一个用途是可以用来分析dump数据,还可以调试进程死锁之类的。调试功能,类似于Visual Studio,还支持命令方式。该文档只适用于VC++,而C#的还需要额外进行一些配置,原理大致相同。

Windbg只是一个工具,要掌握其基本的使用方法,和调试命令,在实践中不断完善自己的调试手段。同时可以参考一下大师们的文献《Windows用户态程序高效排错》,《Windows高级调试》,《软件调试》


下载

Windbg使用非常广泛,网上非常多的下载版本,而且文档也比较多,可以到CSDN或者其他网站下载,支持绿色包运行。


配置

Windbg在使用前,需要进行配置。

1.1环境变量

1、添加环境变量:_NT_SYMBOL_PATH

2、环境变量值:

C:\MyCodesSymbols;SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols

环境变量配置

3、根据环境变量值,在C盘下新建文件夹:MyCodesSymbols,MyLocalSymbols这两个文件夹主要存放windows的符号文件,也就是系统默认的一些pdb文件,这些文件不是系统自带的,需要配置好链接,第一次调试的时候windbg默认下载需要的缺失的symbol文件。

pdb 下载的文件


Windbg工具配置

符号配置Symbol File Path

C:\MyCodesSymbols;SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols

符号配置

源码路径配置Source File Path

工具不会智能定位到相应的源码,所以要配置你的源码工程的路径,是工程文件(例如这种格式的文件:*.vcxproj)所在的路径。

源码配置1

源码位置


编译器配置

支持VC6以上的Visual Studio编译器,设置相关的属性

禁止优化项:

禁止优化项1

禁止优化项2

生成程序数据库文件

pdb 文件


使用

工具进行使用前配置后,可以进行工作了。这里介绍绑定进程进行调试的操作步骤。


绑定进程

注意,进程要先启动再进行绑定设置,因为Attach to Process窗口不会像任务管理器一样实时刷新进程。选中进程名称,点击Ok确认。

绑定进程


调试

绑定进程后,可以在命令窗口输入g字母命令,然后回车。或者用快捷键F5。即可在调试中运行进程了。注意:须要pdb文件,和exe或dll放在一起,或者上文提到的把pdb文件放在C:\MyCodesSymbols目录。因为调试信息都是根据pdb的文件时间戳进行定位历史文件的,所以在发布版本后,最好备份一下代码和文件。否则版本发出去了,原生源码进行编译了,pdb不一样了,源码被修改了,那么抓取到的*.dmp内存映像就不能准确地调试。

程序被windbg绑定后,F5运行,现在可以正常操作软件了。这时候软件有异常,命令窗口会打印相关的异常命令,如下图:

Access violation–code c0000005 (first chance)

调试

这种是典型的内存禁止访问异常。输入小写字母k命令,即可打印堆栈。左窗口也是相应的源码,像vs那样调试。工具栏上有很多调试窗口可以展示出来:

调试工具栏

如局部变量数据展示窗口:Locals

变量展示窗口


命令

除了基本的可视化调试之外,windbg支持命令进行其他的内核调试,可以根据实际需要进行使用,下面简单介绍常用的命令:

1、查看版本信息:version、vertarget。

2、查看模块信息:lm、!dlls、!lmvi等。

3、调用栈:用k命令显示调用栈,用.frames命令切换栈帧。

4、内存操作:读内存用d命令,写内存用e命令。

5、自动分析:!analyze、!owner等。

6、符号命令:.reload加载符号, .sympath设置符号路径, !sym设置符号选项。

7、进程线程:!process显示进程信息;.process显示当前进程,或用.process /i切换当前进程;!peb显示进程环境块内容;~命令显示线程列表,用~n s可切换当前线程,n表示线程号;.thread显示当前线程。


分析dmp文件

Windbg是调试的利器,可以绑定进程进行调试,也可以调试进程的内存映像*.dmp文件,一般是进程崩溃后系统产生的dmp文件,或者程序try catch用代码生成的dmp文件。分析dmp文件,也大致上以上步骤,只不过上面是绑定文件,这个是打开dmp文件而已。

打开 dump 文件


扩展

绑定进程,调试dmp文件,当然除了windbg之外,还可以直接用vs编译器,这是最好不过的事,只是vs编译器体积实在太大了,没有windbg小巧方便。


更精彩内容,请关注我的博客:https://wenfh2020.com

5人点赞

windows



作者:wenfh2020
链接:https://www.jianshu.com/p/be2a650e27db
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windbg使用说明书 的相关文章

  • 本机内存泄漏 - 如何查找分配源的调用堆栈

    根据 address summary 命令的以下输出 我认为我遇到了本机内存泄漏 为了确定这些分配发生的位置的调用堆栈 我正在关注以下文章 http www codeproject com KB cpp MemoryLeak aspx ht
  • 从 Linux 调试 Windows 内核

    我曾经使用调试 Windows 内核虚拟KD WinDBG和一个虚拟机 最近我得到了一台Linux机器 现在我想知道当你的主机无法运行时调试Windows内核的最简单方法是什么虚拟KD WinDBG 我假设该解决方案需要两个虚拟机 但我宁愿
  • 无法读取 Windbg 中的故障转储

    我的程序中出现了 stackoverflow 异常 该异常可能源自第三方库 microsoft sharepoint client runtime dll Using adplus为了创建故障转储 我面临的问题是 当我在 Windbg 中打
  • 我的堆是否碎片化

    0 000 gt dumpheap stat total 1755874 objects Statistics MT Count TotalSize Class Name 7b9b0c64 1 12 System Windows Forms
  • 可以让 WinDBG 在符号存储中找到 mscordacwks.dll 吗?

    问题 有很多手动方法可以让 WinDBG 在没有符号存储的情况下找到 mscordacwks dll 将文件放在某个路径中 将其放在与 Windbg exe 相同的文件夹中 将其放在我的 Framework v 文件夹中 在使用WinDBG
  • 无法找到模块“mscorwks.dll”

    我尝试使用 winDBG 来调试转储文件 当我运行 loadby sos mscorwks dll 时 它给了我一条错误消息 无法找到模块 mscorwks dll 有没有人见过这个 如果您正在调试 NET 4 0应用程序 您需要使用以下内
  • Windbg内存映射?

    如何在 Windbg 中获得类似于 Ollydbg 内存映射功能的内存映射 我想查看按顺序显示加载到每个范围的内容的地址空间列表 最好带有指示的内存保护 这是 Ollydbg 内存映射的屏幕截图 address准确显示此信息 它可以在用户模
  • WinDbg - 将字符串参数与内存中的字符串进行比较

    我需要比较一个字符串 作为参数传递给WinDbg用记忆中的字符串 如何才能实现这一目标 例如 该字符串位于加载的 PE 内的特定偏移处 所以 我可以通过执行轻松读取字符串da c 100
  • 切换到内核转储中的用户堆栈

    有没有办法在进行事后调试时切换到内核转储中特定进程的用户模式 我记得在使用 process 命令进行实时调试时执行此操作 process也适用于内核转储 首先 您可以使用以下方式找到您的流程 process 0 0 myprocess ex
  • Windbg lm:“延迟”是什么意思?

    我正在 WinDbg 中调试 NET 2 0 程序集的故障转储文件 当我在 WinDbg 中输入 lm 时 我会得到一长串已加载的模块 如下所示 723c0000 72950000 mscorwks deferred 这里的 延期 是什么意
  • Windbg 设置取决于调用堆栈的条件断点

    问题 我需要制作一个脚本或表达式 如果调用堆栈上的某处是具有特定名称的函数 则该脚本或表达式不会中断 具体问题 如何将调用堆栈上的函数获取到字符串列表 Example Module MyFunctionWithConditionalBrea
  • 调用栈和反汇编疑问

    三大疑点 1 假设我得到如下调用堆栈 user32 dll InternalCallWinProc 20 0x28 bytes user32 dll UserCallWinProcCheckWow 32 0xb7 bytes user32
  • 如何阻止 Windbg 成为交互式调试器?

    正确的撤消方法是什么Windbg I在 Vista Win7 上 难道只是删除 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows NT CurrentVersion AeDebug 中的注册表项那么
  • 如何将windbg命令重定向到文件而不在windbg控制台上回显输出?

    logopen不是答案 因为它让命令输出到windbg控制台 例如 sosex dumpgen 2产生大量输出 我不想在调试器控制台中看到这些输出 现在我正在使用以下内容 shell i ci dumpgen 2 cmd c more gt
  • Windows 调试工具未安装

    我正在尝试通过 Windows SDK 安装 Windows 调试工具 两次尝试后我不知道该怎么做 我开始安装 没有收到任何错误 但调试工具 windbg 和 kd 却找不到 日志几乎毫无用处 9 16 59 PM Monday July
  • 转储文件分析

    Recently I start facing issue on few servers where CPU start consuming more resources than usual trend I am trying to fi
  • 为 Windbg 获取正确的 .net 本机符号

    我正在做一些故障转储调试 我正在查找从生产服务器获取的转储 我运行 WinDbg 的机器必须安装有稍微不同版本的 NET 运行时 我在加载 NET 系统程序集的本机映像时遇到错误 因此无法加载 System Data Linq 确保我的调试
  • 分析 Windbg 中的故障转储

    我正在使用第三方闭源 API 它会抛出一个异常 指出 所有命名管道都忙 我想进一步调试 而不是单步调试 这样我就可以真正了解幕后发生的事情 我使用 WinDbg 转储了这个过程 我现在应该使用什么命令来分析此转储 Thanks 您可以开始执
  • 什么可以解释托管堆上超过 5,000,000 个 System.WeakReference 实例?

    我一直在针对生产 ASP NET Web 应用程序运行负载测试 并且看到在堆上创建了大量 System WeakReference 在大约 15 分钟内 负载管理堆内存已飙升至大约 3GB 并且我有大约 5 000 000 个对 Syste
  • COM+ 应用程序死锁故障排除

    我正在尝试对间歇性死锁的 COM 应用程序进行故障排除 上次锁定时 我能够获取 dllhost 进程的用户模式转储并使用 WinDbg 对其进行分析 检查完所有线程和锁后 一切都归结为该线程拥有的关键部分 ChildEBP RetAddr

随机推荐

  • 【数据结构】排序算法

    不稳定的排序算法 xff1a 快排 堆排 选择 希尔 排序算法时间复杂度空间复杂度稳定性冒泡 xff08 Bubble Sort xff09 O n 2 O 1 稳定快排 xff08 Quick Sort xff09 O n logn O
  • 【数据结构】POJ 1985 Cow Marathon(树的直径)

    链接 xff1a http poj org problem id 61 1985 题意 xff1a 有 n n n 个农场和 m m m 条路 xff0c 以及每条
  • 【C#】接口的基本概念

    目录 基本 什么是接口接口与抽象类的区别 抽象类接口实例 设计接口 基本 什么是接口 C 接口 interface 是 xff1a 用来定义一种程序的协定 实现接口的类或者结构要与接口的定义严格一致 有了这个协定 xff0c 就可以抛开编程
  • 部署Sonic编译服务器

    编译Sonic环境 部署Sonic编译环境编译准备开机自动挂载硬盘创建用户安装 Docker开始编译 部署Sonic编译环境 先给服务器安装 Ubuntu20 04 02 系统 xff0c Sonic编译 Github 链接 sonic b
  • 【闲聊STP/RSTP】

    闲聊STP RSTP xff08 Spanning Tree Protocol xff09 STP xff08 Spanning Tree Protocol xff09 xff0c 1998年IEEE提出的802 1D协议 xff0c 它是
  • 实现云弹性的一种方法—系统和混沌测试

    在当今数字技术时代 xff0c 停工就意味着停机 xff0c 构建弹性云结构势在必行 例如 xff0c 在新冠疫情期间 xff0c IT 维护团队不能再在本地重新启动数据中心的任何服务器 如果本地硬件出现故障 xff0c 这可能会导致访问所
  • 如何选择云数据库?

    无论你是在建立你的第一个还是第五十个应用程序 xff0c 选择一个数据库是最困难的选择之一 这将是你做出的第一个决定之一 xff0c 也可能是在你的应用程序中根深蒂固的一个决定 由于有大量优秀的数据库可用 xff0c 而且有大量现成的信息可
  • Hbase(一)入门

    Hbase xff08 一 xff09 一 Hbase概述1 简介2 Hbase数据模型3 Hbase简化架构4 写数据5 MemStore Flush6 读数据7 StoreFile Compaction 二 Hbase安装1 Hbase
  • 解决properties文件读取中文乱码

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net qq 39237513 article
  • gcc下载地址(Linux/windows安装)

    gcc官网 xff1a http gcc gnu org gcc镜像站点 xff1a https gcc gnu org mirrors html 各版本下载地址 ftp ftp mirrorservice org sites source
  • 树莓派系统镜像备份

    SD卡系统镜像备份 引言1 下载镜像备份脚本2 查看sd卡设备名称3 复制镜像4 压缩镜像 引言 SD卡系统镜像备份有多种方式 xff0c 最简单粗暴的是使用Win32diskImager工具 xff0c 将SD卡的镜像直接读取 xff0c
  • 不同版本mysql-connector-java的jar包下载地址

    jar包下载方式 官网地址 xff1a MySQL Download Connector J xff0c 如果你打不开官网 xff0c 在下面我为你准备了直接下载jar包的链接地址 在选择操作系统时 xff0c 此处选择platform i
  • 需要来自administrators的权限才能对此文件夹进行更改

    1 右键文件夹 xff0c 选择 属性 2 选择 安全 3 选择 高级 4 选择 更改 5 选择 高级 6 选择 立即查找 7 选择 Administrators xff0c 然后点击确定 8 再次点击 确定 9 选择 替换子容器和对象的所
  • 远程计算机或设备不接受连接解决方法

    当你的电脑浏览器不能正常上网时 xff0c 显示 点击网络诊断 xff0c 显示远程计算机或设备将不接受连接 解决办法 xff1a 1 点击左下角开始 xff0c 点击运行 xff0c 输入inetcpl cpl xff0c 点击确定 xf
  • Navicat 右键刷新没用

    Navicat 右键刷新没用 xff0c 点下方刷新图标才有用 右键刷新应该是刷新表结构 xff0c 下方刷新图标是刷新这张表的数据
  • leetcode 150. 逆波兰表达式求值

    题目描述 xff1a 给你一个字符串数组 tokens xff0c 表示一个根据 逆波兰表示法 表示的算术表达式 请你计算该表达式 返回一个表示表达式值的整数 注意 xff1a 有效的算符为 39 43 39 39 39 39 39 和 3
  • leetcode 239. 滑动窗口最大值

    题目描述 xff1a 给你一个整数数组 nums xff0c 有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧 你只可以看到在滑动窗口内的 k 个数字 滑动窗口每次只向右移动一位 返回 滑动窗口中的最大值 样例 xff1a 示例
  • leetcode 347. 前 K 个高频元素

    题目描述 xff1a 给你一个整数数组 nums 和一个整数 k xff0c 请你返回其中出现频率前 k 高的元素 你可以按 任意顺序 返回答案 样例 xff1a 示例 1 输入 nums 61 1 1 1 2 2 3 k 61 2 输出
  • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 解决方案

    com mysql jdbc exceptions jdbc4 MySQLSyntaxErrorException Unknown column 39 39 in 严重 Servlet service for servlet jsp thr
  • Windbg使用说明书

    Windbg使用说明书 Windbg使用说明书 简书 jianshu com 术语 缩略语 windbg windows平台下 xff0c 强大的用户态和内核态调试工具 dmp 内存映像文件 xff0c 一般是系统错误产生的文件 Pdb 程