windbg 调试崩溃

article/2025/10/6 19:42:54

 

前言

windbg 是非常强大的调试工具,但是在使用windbg 进修调试时候,很多的命令不知道如何使用。文章简单介绍如何使用windbg进行调试

https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools

 

一、Windows 调试入门

https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools

 

二、命令分类

1..元命令(windgb操作命令)

可用于 CDB、KD 和 WinDbg 的各种调试器 元命令,这些命令前面都有一个点。可以对进程数据进行显示和调整。

例如:.ecxr 命令显示与当前异常关联的上下文记录。

0:000> .ecxr
eax=00000000 ebx=1e7cb010 ecx=00000000 edx=00000001 esi=66a0eba0 edi=3951c6b0
eip=0012abe0 esp=00cf8df0 ebp=00cf8e38 iopl=0         nv up ei pl nz ac pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00210216
lec_teacher!GoodsPreviewWidget::getShowMode:
0012abe0 8b411c          mov     eax,dword ptr [ecx+1Ch] ds:002b:0000001c=????????

https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/meta-commands

2.命令

可用于 CDB、KD 和 WinDbg 的各种调试器 命令。这些命令主要是内部调试使用。

例如:kb命令就是显示堆栈信息的

0:000> kb*** Stack trace for last set context - .thread/.cxr resets it# ChildEBP RetAddr      Args to Child              
00 00cf8dec 002da5ca     96b6b062 3951c6b0 40f28218 lec_teacher!GoodsPreviewWidget::getShowMode [d:\shendun_lec_teacher\origin\version\1.5.7\src\plugin\activity\goods\goodspreviewwidget.cpp @ 22] 
01 00cf8e38 66a0c9ba     00000001 3951c6b0 1e7cb010 lec_teacher!GraphicsToolManager::onCountDownAccepted+0x7a [d:\shendun_lec_teacher\origin\version\1.5.7\src\tool\graphics\manager\graphicstoolmanager.cpp @ 739] 
02 (Inline) --------     -------- -------- -------- Qt5Core!QtPrivate::QSlotObjectBase::call+0x17 [c:\users\qt\work\qt\qtbase\src\corelib\kernel\qobjectdefs_impl.h @ 394] 
03 00cf8ed0 66a0cc8e     40f26bc8 66d48844 66d48844 Qt5Core!QMetaObject::activate+0x40a [c:\users\qt\work\qt\qtbase\src\corelib\kernel\qobject.cpp @ 3774] 
04 00cf8ee4 644c8218     40f26bc8 646197f4 00000001 Qt5Core!QMetaObject::activate+0x1e [c:\users\qt\work\qt\qtbase\src\corelib\kernel\qobject.cpp @ 3646] 
05 (Inline) --------     -------- -------- -------- Qt5Widgets!QDialog::rejected+0xb [c:\users\qt\work\qt\qtbase\src\widgets\.moc\release\moc_qdialog.cpp @ 241] 
06 (Inline) --------     -------- -------- -------- Qt5Widgets!QDialogPrivate::finalize+0x23 [c:\users\qt\work\qt\qtbase\src\widgets\dialogs\qdialog.cpp @ 178] 
07 00cf8f0c 644843da     00000001 002e5485 96b6b10a Qt5Widgets!QDialog::done+0x38 [c:\users\qt\work\qt\qtbase\src\widgets\dialogs\qdialog.cpp @ 632] 
08 00cf8f14 002e5485     96b6b10a 00000000 00000002 Qt5Widgets!QAbstractSpinBox::stepUp+0xa [c:\users\qt\work\qt\qtbase\src\widgets\widgets\qabstractspinbox.cpp @ 617] 
09 00cf8f50 003518b2     40f26bc8 00000000 00000002 lec_teacher!CountDownDialog::on_okBtn_clicked+0x165 [d:\shendun_lec_teacher\origin\version\1.5.7\src\tool\graphics\widgets\countdowndialog.cpp @ 204] 
0a 00cf8f74 669f5808     00000000 0000002b 00cf9054 lec_teacher!CountDownDialog::qt_metacall+0x32 [d:\shendun_lec_teacher\origin\version\1.5.7\release\moc_countdowndialog.cpp @ 180] 
0b 00cf8f84 66a0cacf     40f26bc8 00000000 0000002b Qt5Core!QMetaObject::metacall+0x28 [c:\users\qt\work\qt\qtbase\src\corelib\kernel\qmetaobject.cpp @ 304] 
0c 00cf9018 66a0cc8e     32be0c10 66d4871c 66d4871c Qt5Core!QMetaObject::activate+0x51f [c:\users\qt\work\qt\qtbase\src\corelib\kernel\qobject.cpp @ 3813] 
0d 00cf902c 643fdd80     32be0c10 6460966c 00000002 Qt5Core!QMetaObject::activate+0x1e [c:\users\qt\work\qt\qtbase\src\corelib\kernel\qobject.cpp @ 3646] 
0e (Inline) --------     -------- -------- -------- Qt5Widgets!QAbstractButton::clicked+0x27 

 

https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/commands

 

3.常规扩展命令

用户模式和内核模式调试过程中经常使用的扩展命令。

使用一些扩展库的命令 ext.dll 或 dbghelp.dll

例如:!analyze

0:000> !analyze -v
ADDITIONAL_XML: 1OS_BUILD_LAYERS: 1NTGLOBALFLAG:  0PROCESS_BAM_CURRENT_THROTTLED: 0PROCESS_BAM_PREVIOUS_THROTTLED: 0APPLICATION_VERIFIER_FLAGS:  0CONTEXT:  (.ecxr)
eax=00000000 ebx=1e7cb010 ecx=00000000 edx=00000001 esi=66a0eba0 edi=3951c6b0
eip=0012abe0 esp=00cf8df0 ebp=00cf8e38 iopl=0         nv up ei pl nz ac pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00210216
lec_teacher!GoodsPreviewWidget::getShowMode:
0012abe0 8b411c          mov     eax,dword ptr [ecx+1Ch] ds:002b:0000001c=????????
Resetting default scopeEXCEPTION_RECORD:  (.exr -1)
ExceptionAddress: 0012abe0 (lec_teacher!GoodsPreviewWidget::getShowMode)ExceptionCode: c0000005 (Access violation)ExceptionFlags: 00000000
NumberParameters: 2Parameter[0]: 00000000Parameter[1]: 0000001c
Attempt to read from address 0000001cPROCESS_NAME:  lec_teacher.exeREAD_ADDRESS:  0000001c ERROR_CODE: (NTSTATUS) 0xc0000005 - 0x%p            0x%p                    %sEXCEPTION_CODE_STR:  c0000005EXCEPTION_PARAMETER1:  00000000EXCEPTION_PARAMETER2:  0000001cSTACK_TEXT:  
00cf8dec 002da5ca     96b6b062 3951c6b0 40f28218 lec_teacher!GoodsPreviewWidget::getShowMode
00cf8e38 66a0c9ba     00000001 3951c6b0 1e7cb010 lec_teacher!GraphicsToolManager::onCountDownAccepted+0x7a
00cf8ed0 66a0cc8e     40f26bc8 66d48844 66d48844 Qt5Core!QMetaObject::activate+0x40a

 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/general-extensions

三、windbg调试dump

1、打开dump

拖动打开:可以直接将dump文件拖动到窗口中,就可以打开。

操作打开:文件- start debugging- open dump file

快捷键:Ctrl + d

命令:. opendump (打开转储文件)

在命令提示符窗口中(cmd):windbg-y SymbolPath -i ImagePath -z DumpFileName

加载一般需要一段时间,稍微等一下就ok。

 

2、设置符号

在打开dump文件之后,很重要的事情就是设置符号文件(pdb)

要控制 WinDbg 中的符号路径,请执行以下操作之一:

1、命令(元命令):使用 . sympath (设置符号路径) 命令。 如果使用的是符号服务器,则 symfix (设置符号存储路径) 命令类似于 . sympath ,但会保存键入内容。

2、界面操作:home - setting -debugging settting 如下图

 

3、查看崩溃信息

完成前面2步就可以开始调试崩溃信息,在打开dump文件时候,有一个提示,可以点击操作,命令(扩展命令)是!analyze -v 如下图

!analyze -v 是继承了很多的操作,在一开始命令分类中就介绍了,例如:

 (.ecxr) , (.exr -1), ~0s ; .ecxr ; kb

4、查看调用栈

虽然!analyze -v虽然帮助我们综合的显示了一下崩溃信息,但是我们还是需要了解一些基本的操作指令,第一个就是查看调用栈

查看调用栈的命令是 k 

0:000> k# ChildEBP RetAddr      
00 00cf8434 754d1f23     ntdll!NtWaitForMultipleObjects+0xc
01 00cf85c8 754d1dd8     KERNELBASE!WaitForMultipleObjectsEx+0x133
02 00cf85e4 7773ebc0     KERNELBASE!WaitForMultipleObjects+0x18
03 00cf8690 7773eddf     kernel32!WerpReportFaultInternal+0x3b7
04 00cf86ac 77701319     kernel32!WerpReportFault+0x9d
05 00cf86b4 755660f2     kernel32!BasepReportFault+0x19
06 00cf8754 77abd511     KERNELBASE!UnhandledExceptionFilter+0x2a2
07 00cffd1c 77a8302a     ntdll!__RtlUserThreadStart+0x3a4e6
08 00cffd2c 00000000     ntdll!_RtlUserThreadStart+0x1b

或者可以在stack的窗口中看到调用栈,如果想查看不同层级的帧,可以点击对应的函数方法就可以。堆栈跟踪基于当前线程的堆栈。 

5、查看和切换线程

~ s 命令设置或显示当前的线程号。~线程的操作命令

~Thread s  ,Thread 表示第一个线程。

~ 线程的状态

命令操作
~显示所有线程。
~*显示所有线程。
~.显示所有active 的线程
~#引起异常的线程
~2显示2号线程
0:000> ~
.  0  Id: 390.4418 Suspend: 0 Teb: 00b7b000 Unfrozen ""1  Id: 390.42f8 Suspend: 1 Teb: 00b87000 Unfrozen# 2  Id: 390.4174 Suspend: 1 Teb: 00b8a000 Unfrozen ""3  Id: 390.3ffc Suspend: 1 Teb: 00b8d000 Unfrozen

在此输出的第一行,0是小数线程号,390 是十六进制的进程 ID,4418是十六进制线程 ID,0x7FFDE000 是 TEB 的地址,而 解冻 的是线程状态。

 在线程1之前 . 这意味着此线程为当前线程。

 线程2前面的数字符号 (#) 意味着此线程最初引发异常,或者在调试器附加到进程时它处于活动状态。

 

6、切换上下文

.frame(设置本地上下文),相当于查看调用栈中的选择不同层的调用栈

帧号 是堆栈跟踪内堆栈帧的位置。 可以通过 k (显示 Stack Backtrace) 命令或 调用窗口来查看此堆栈跟踪。 当前帧 (第一行) 为帧号0。 后续行表示第1、2、3等帧号。

dv(显示局部变量)

0:000> .frame 0n7;dv /t /v
07 014fd4b8 00a06b1a     graffiti_graphics!xes::graffiti::GraffitiGraphicsImpl::setVideoImage+0x1c3 [d:\tal\work\git\lec_teacher_client_graffiti\submodules\graffiti_graphics\graffiti_graphics\graffitigraphicsimpl.cpp @ 285] 
@esi              class xes::graffiti::GraffitiGraphicsImpl * this = 0x2e688700
@edi              class QImage * image = 0x014fd4d4
014fd4a4          int i_h = 0n690
014fd4a0          int i_w = 0n1270
014fd49c          int v_h = 0n521
<unavailable>     float ratio = <value unavailable>
014fd470          class QImage overlayImage = class QImage
014fd480          class QSize imageSize = class QSize
014fd4a8          int v_w = 0n960
<unavailable>     float veiwRatio = <value unavailable>
<unavailable>     int h = <value unavailable>
014fd460          class QRect target = class QRect
014fd4c0          class QPainter painter = class QPainter
014fd488          class QSize v_size = class QSize

 

未完待续

 

 


http://chatgpt.dhexx.cn/article/5JyQLAEK.shtml

相关文章

windbg 调试学习

符号服务器地址 微软的公共符号服务器地址&#xff1a;Symbol information 五种符号加载状态 1. deferred: 延迟加载&#xff0c;现在还不需要使用这个模块的符号&#xff0c;将在后面需要的时候加载 2. no symbols: 没有找到相应的符号文件 3. export: 没有找到symbols,但…

Windbg调试(使用方法)

一、Windbg版本信息 Windbg分32位和64位版本&#xff0c;32位程序应使用32位Windbg调试&#xff0c;64位程序应64位Windbg调试。 若想使用64位的Windbg分析32位的程序, 使用如下命令进行CPU模式的切换&#xff1a; .load wow64exts;!sw//例如&#xff1a; 1.查看线程停在哪里…

Windebug

1、 安装drwtsn32&#xff08;Dr.Watson win7没有了&#xff09; 用户可以通过drwtsn32命令&#xff0c;查看dmp文件会被保存在何处。 2、 安装windbg,Windbg下载地址&#xff1a; http://www.microsoft.com/whdc/devtools/debugging/default.mspx 3、 设置windbg A、符号表路径…

windbg调试分析dump工具,使用windbg分析Qt崩溃原因

目录 windbg下载和安装windbg调试exe可执行文件windbg分析dump文件 在非开发环境&#xff0c;windbg工具可以对.exe可执行文件进行调试&#xff0c;也可以分析dump文件&#xff0c;是release版本运行模式解决bug的神器。 windbg下载和安装 一般在安装windows系统软件时会安装w…

02-windows调试工具(DebugDiag使用)

工具下载地址&#xff1a;https://www.microsoft.com/en-us/download/details.aspx?id49924csdn的下载地址&#xff1a;https://download.csdn.net/download/qq_37103755/87089384DebugDiag的简介&#xff1a; DebugDiag 工具主要用于帮助解决如挂起、 速度慢、 内存泄漏或内存…

如何使用Debugging Tools for Windows (windebug)简单的使用心得

1.安装debug工具 ​ 下载页面地址&#xff1a;http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx 选择合适的版本安装 ​ 2.安装Symbols&#xff08;特征库&#xff09; 建议可以多安装以免出现分析不出来的情况 ​ 下载地址&#xff1a;http://www.mi…

WinDebug快速使用及调试注意事项

参考文献&#xff1a; http://www.cnblogs.com/killmyday/archive/2010/03/14/1685331.html WinDbg是微软发布的一款强大的源码级调试工具&#xff0c;支持用户态和内核态两种模式的调试&#xff0c;支持Dump文件分析、内存泄露诊断、同时支持跨机器远程附加进程调试。在具体…

Windows下调试工具Windbg入门

前言 Windbg简单来说就是一个Windows下对用户态/内核态的程序进行调试&#xff0c;以及对Core Dump文件的分析。对于Crash&#xff0c;资源泄露&#xff0c;死锁等问题的分析&#xff0c;Windbg是一个强有力的利器。 一、下载 微软官网提供的Windbg为windows10版本&#xff…

这可能是最详细的 Windows Debug 详解 了

Debug概览 Debug是什么&#xff1f; debug是Windows 16位或者32位机器上的一款调试工具。也就是说&#xff0c;在WindowsXP及以前的机器上都有debug&#xff0c;直接WinX debug就可以调出&#xff1b;在之后的32位机也有&#xff1b;但是在之后的64位机器上不存在&#xff0c…

Debugging Tools for Windows (WinDbg)的使用

安装 可能大家安装时&#xff0c;直接从外部的网址下载或者拷贝&#xff0c;一般这也是可行的&#xff0c;只不过可能安装的不是最新版本&#xff0c;或者找不到和自己当前系统匹配的版本&#xff0c;所以最简单的方法还是去微软的官网下载 下载地址: Download Debugging tool…

Windows调试工具入门 — windebug

一、 引子 Debugging Tools for Windows是微软发布的一套用于软件调试的工具包(后面如果没有指明&#xff0c;那么我会使用WinDbg来作为这一套调试工具的简称)。我第一次接触是在三年前的一个内核驱动项目&#xff0c;由于进行了IDT中键盘鼠标中断的Hook&#xff0c;使用Softi…

Windebug专题

5 解决问题案例 !cs、~~[TID]&#xff08;经典死锁&#xff09; 随手写的&#xff1a; #include <windows.h > CRITICAL_SECTION cs1; CRITICAL_SECTION cs2; DWORD __stdcall thread1(LPVOID lp) { EnterCriticalSection(&cs1); Sleep(10); EnterCriticalSection(…

winDebug 调试

1.背景 最近由于线上的程序发生了死锁&#xff0c;而且重现的概率很低&#xff0c;正好客户反馈一个任务超时了&#xff0c;登上线上环境发现有一个“僵尸”进程&#xff0c;占用内存不波动&#xff0c;cpu仍在占用&#xff0c; 那么用创建转储文件&#xff0c;用windbg调试吧…

ZedGraph类库之基本教程---PieSampleDemo.cs(画饼)

ZedGraph类库之基本教程 PieSampleDemo.cs介绍 这节我把饼形图粗略的介绍一下&#xff0c;如下图。 PieSampleDemo.cs&#xff08;画饼&#xff09; using System; using System.Drawing; using System.Collections; using ZedGraph; namespace ZedGraph.Demo { ///<sum…

Winforn中设置ZedGraph曲线图的属性、坐标轴属性、刻度属性

场景 C#窗体应用中使用ZedGraph曲线插件绘制图表&#xff1a; https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99716066 在上面已经实现基本的曲线图之后&#xff0c;效果如下&#xff1a; 当然这不是我们的效果&#xff0c;还要对其属性进行设置。 但是毕竟其…

转载:ZedGraph使用帮助

译文&#xff1a; 序言 ZedGraph是用于创建任意数据的二维线型、条型、饼型图表的一个类库&#xff0c;也可以作为Windows窗体用户控件和ASP网页控件&#xff08;这里有个web-accessible 不知道该怎么翻译&#xff09;。这个类库具有高度的适应性&#xff0c;几乎所有式样的图…

ZedGraph如何去掉外边框?并设置背景颜色

ZedGraph的在显示曲线图的时候&#xff0c;有外边框一直在显示&#xff0c;会显得特别碍眼&#xff0c;如何去掉它呢&#xff1f; 这个是原始的现象 1 去掉外边框的做法如下&#xff1a; //去掉外边框this.zedGraph.GraphPane.Border.IsVisible false;2 设置一下背景颜色 //设…

用ZedGraph控件画统计分析图.

由于朋友需要把C1WebChart.替换掉,改用开源的ZedGraph控件.以下做一个示例,供大家参考: 步骤如下: 1、添加ZedGraph控件。如下图&#xff1a; 2、添加到控制面版。如下图&#xff1a; 3、制作用户控件。 a> 建立一个命名为&#xff1a; DrawGrap.ascx 用户控件。 b…

C# 利用ZedGraph控件画简单折线图示例

下载ZedGraph 官网下载地址 http://sourceforge.net/projects/zedgraph/files/ 添加 ZedGraph.dll 和ZedGraph.Web.dll的引用 在控件库中添加ZedGraph控件 右键点击工具箱 - 选择项 - .Net Framework 组件 - 浏览 - 找到ZedGraph.dll 和ZedGraph.Web.dll添加…

zed graph使用经验

转自&#xff1a;http://www.cnblogs.com/gaizai/archive/2010/02/22/1671154.html ZedGraph使用经验 开源的统计图控件中基本常用的是OpenFlashChar和ZedGraph&#xff0c;今天就先来讲讲ZedGraph的使用。 ZedGraph资源 ZedGraph来源&#xff1a;http://sourceforge.net/proj…