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

article/2025/10/6 11:33:30

目录

  • windbg下载和安装
  • windbg调试exe可执行文件
  • windbg分析dump文件

在非开发环境,windbg工具可以对.exe可执行文件进行调试,也可以分析dump文件,是release版本运行模式解决bug的神器。

windbg下载和安装

一般在安装windows系统软件时会安装windbg,如果没有可以去官网下载:
windbg下载地址:https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools
选择“用于 Windows (WinDbg) 的调试工具”,点击“Windows SDK”,“download the installer”,下载winsdksetup.exe在线安装,勾选:
在这里插入图片描述
安装完成后,开始菜单搜索windbg,启动即可。
微软官网文档:https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debugger/getting-started-with-windbg。

windbg调试exe可执行文件

windbg调试依赖.pdb符号文件,调试器需要符号文件来获取有关代码模块的信息(函数名、变量名等)。
如果使用Qt开发,发布的release版本默认不生成.pdb文件,需要在pro文件添加如下内容:

QMAKE_LFLAGS_RELEASE += /MAP
QMAKE_CFLAGS_RELEASE += /Zi
QMAKE_LFLAGS_RELEASE += /debug /opt:ref
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE += $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
LIBS += -lDbgHelp

在编译release版本时生成.pdb符号文件,注意.pdb文件可能会泄漏源码,不要和exe一起打包发布,在需要调试时再拿过来用。

本例使用Qt写了一个简单的demo,编译生成可执行文件testDump.exe,运行后崩溃,代码如下:

void myfuncTest()
{int testNum = 25;qDebug() <<"testNum="<<testNum;
}
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);myfuncTest();printHelloWorld();cptFunc();
}
int MainWindow::cptFunc()
{int *pnum = NULL;printf("*pnum=%d\n",*pnum);//打印没有分配内存的指针变量,导致crashreturn 0;
}
void MainWindow::printHelloWorld()
{qDebug() <<"HelloWorld";
}

打包发布后,使用windbg工具,选择菜单栏file-open Executable…,打开“testDump.exe”可执行文件,显示如下内容,包括符号搜索路径,可执行文件依赖库的搜索路径:
在这里插入图片描述

几个常用命令:

.sympath srv*
查询符号搜索路径。

.reload
重新加载符号。

x testDump!*
查询可执行文件所有的符号,如果程序较大,符号列表会非常长。

x testDump!MainWindow::cpt*
*号是通配符,查询以MainWindow::cpt开头的符号,查询输出:

0:000> x testDump!MainWindow::cpt*
00007ff7`ec1310ca testDump!MainWindow::cptFunc =  (inline caller) testDump!MainWindow::MainWindow+4a

bm testDump!myfuncTest
testDump!myfuncTest,在这个符号位置设置断点,输出:

0:000> bm testDump!myfuncTest1: 00007ff6`37a510ca @!"testDump!myfuncTest" (testDump!myfuncTest inlined in testDump!MainWindow::MainWindow+0x4a)

bl
bl查询断点,输出:

0:000> bl2 e Disable Clear  <inline function>     0001 (0001)  0:**** {testDump!myfuncTest}1 e Disable Clear  00007ff6`37a510ca     0001 (0001)  0:**** testDump!MainWindow::MainWindow+0x4a (inline function testDump!myfuncTest)

g
g启动可执行程序,Breakpoint 1 hit命中一个断点,程序停止在断点处。
k
k查看堆栈跟踪,代码路径是记录在符号文件里的,如果这个路径有源码,则左侧会自动加载代码;如果路径没有源码,左侧不会弹代码框,但也可以进行调试。
dv /t
查看局部变量值,pnum 是空指针,所以打印的时候crash了。

0:000> dv /t
int * pnum = 0x00000000`00000000

在这里插入图片描述
~
查看进程中所有线程列表。在上述代码中添加一个线程。

~0s
查看编号为0的线程堆栈跟踪,按K查看详细堆栈。
~*kv
~*kv查看所有线程的调用堆栈。
在这里插入图片描述
qd
退出调试,分离进程。

windbg分析dump文件

dump文件是程序崩溃时记录的内存镜像文件,Qt自动生成dump文件的方法参考:Qt崩溃生成内存镜像,windows下生成dump文件,linux下生成core文件。
如果程序运行在远端,不便使用windbg打开exe调试,或者bug不能固定复现,可以设置程序崩溃后自动生成dump文件,发送拷贝到开发环境,使用windbg打开dump分析崩溃原因。

如果分析失败或没有源码信息,可以尝试设置路径:
菜单栏,File,Symbol Search Path,设置符号搜索路径,比如srv* C:\dmb*http://msdl.microsoft.com/download/symbols;C:\Users\13770\Desktop\testDump。
菜单栏,File,Source Search Path,设置源码搜索路径,如果符号文件里记录了源码位置,可不设置。
菜单栏,File,Executable Image Search Path,设置exe可执行文件路径。

!analyze -v
把dmp文件拖到windbg里面自动打开,输入命令!analyze -v进行自动分析,也可结合上面介绍的命令进行分析。
在这里插入图片描述
.ecxr;kbn
查看崩溃的堆栈
.frame 0
切到第0帧
dv
查看当前帧的变量信息


http://chatgpt.dhexx.cn/article/yR8Oteaj.shtml

相关文章

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…

ZedGraph

ZedGraph使用经验 2010-02-22 14:28 by 听风吹雨, 8194 阅读, 3 评论, 收藏, 编辑 开源的统计图控件中基本常用的是OpenFlashChar和ZedGraph&#xff0c;今天就先来讲讲ZedGraph的使用。 ZedGraph资源 ZedGraph来源&#xff1a;http://sourceforge.net/project/showfiles.php…

zedGraph 绘制实时曲线 卡顿

zedGraph是一个开源的曲线绘制插件&#xff0c;由于要制作上位机显示实时数据&#xff0c;百度搜索到了zedgraph&#xff0c;优点是开源&#xff0c;功能也够使用。 缺点是看网址08年后就没有更新过。尝试使用了一下&#xff0c;感觉还可以。 曲线绘制直接看下图。 原理很简单…

ZedGraph 官网下载和帮助文档ZedGraph.chm

ZedGraph介绍 ZedGraph是用C#编写的.NET的类库控件&#xff0c;可用于绘制曲线图、饼图、柱状图、股票K线图等&#xff0c;功能非常强大。 1、ZedGraph的官网是&#xff1a; https://sourceforge.net/projects/zedgraph/ 2、ZedGraph.CHM帮助文档 官网的链接&#xff1a; htt…

graphviz简介

前几天去杨瑞那儿玩&#xff0c;他向我介绍了一个叫graphviz的工具&#xff0c;回来之后试用了一下&#xff0c;觉得真的是很好很强大。下面简单的介绍一下这个工具。 graphviz是贝尔实验室设计的一个开源的画图工具&#xff0c;它的强大主要体现在“所思即所得"&#xff…