https://blog.csdn.net/weixin_39568531/article/details/134787829

在上一篇《Qt 软件调试(二)使用dump捕获崩溃信息》中我们结尾处提示大家先准备好windbg,windbg是非常强大的调试工具,对于我们进行代码调试和分析异常有着非常重要的意义。
在Qt软件调试这个系列的首篇,我们介绍了《Qt 软件调试(一) Log日志调试》,日志在调试过程中一般用于错误的粗定位,若是碰上复杂问题导致的崩溃,日志往往也爱莫能助。
但是,当我们掌握了windbg神器,那么对于异常问题点方可做到精确定位,指哪打哪。本下列笔者将和小伙伴们一起学习、沉淀,一起精进。

一、windbg入门简单示例
1.1 代码示例
// Demo1.cpp
#include <iostream>
#include <windows.h>
#include <sal.h>

int add(_In_ int x, _In_ int y)
{
int r = x + y;
return r;
}

int main()
{
int x = 10;
int y = 20;
int ret = add(x, y);

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

注意,这这里我们选择的是x86的编译工具链。注意在【属性】中,关闭代码优化,并允许生成DEBUG调试信息信息

1.2 使用windbg调试程序
1.2.1 在windbg中启动演示程序

程序进入中断等待调试状态

1.2.2 设置符号表路径和源代码路径(有源码可以设置)

也可以通过命令设置:

.sympath // 查询路径
.sympath fix // 固定路径,会删除已添加的自定义路径
.sympath srv* // 添加微软的符号表
.sympath+ [符号表路径] // 添加自定义符号表路径
1
2
3
4

1.2.3 下断点进行调试
【断点设置方法1】:已知模块名进行设置

【断点设置方法2】:指定文件中的某行设置断点

bp Demo1!Demo1.cpp:XXX // 其中XXX是行号
1

【断点设置方法3】:通过指定起始地址,批量设置断点

1.2.4 调试
g // 程序运行到断点
1
F1 // [按键] 单步调试
1

.restart // 重启调试
1
qd // 退出调试
1
更多调试指令,在本系列加下来的篇章中我们再做更多介绍~

二、参考文章
1、《在WinDBG中手动设置断点》
2、https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debugger/getting-started-with-windbg
————————————————

本文为博主原创文章,未经博主允许不得转载。

原文链接:https://blog.csdn.net/weixin_39568531/article/details/134787829

Qt 软件调试——windbg初篇(一)的更多相关文章

  1. Windbg在软件调试中的应用

    Windbg在软件调试中的应用 Windbg是微软提供的一款免费的,专门针对Windows应用程序的调试工具.借助于Windbg, 我们常见的软件问题:软件异常,死锁,内存泄漏等,就可以进行高效的排查 ...

  2. windows程序员进阶系列:《软件调试》之堆 (一)

    windows程序员进阶系列:<软件调试>之堆 (一) 堆是软件在运行时动态申请内存空间的主要途径.从堆上申请来的空间需要程序员自己申请和释放,且申请和释放操作必须绝对匹配.忘记释放或者多 ...

  3. Windows下软件调试

    1. 视频: (1).VS下的C++调试方法.wnv (2).WinDbg高级调试技术.wmv (3).内存与句柄泄漏处理技巧.wmv 2. “WinDbg高级调试技巧” 中 [01:22]讲到“软件 ...

  4. 《软件调试修炼之道》Part 1(CH1~5)读书笔记 PB16110698 第八周(~4.26)

    编程中,调试几乎是必不可少的,一劳永逸.一次完成预想功能而完全不出bug的情况凤毛麟角,出现bug→调试→再出现bug→再调试……基本是软件工程中的常态.可以说,软件调试是每个coder的必修课,而& ...

  5. .NET 5 程序高级调试-WinDbg

    上周和大家分享了.NET 5开源工作流框架elsa,程序跑起来后,想看一下后台线程的执行情况.抓了个进程Dump后,使用WinDbg调试,加载SOS调试器扩展,结果无法正常使用了: 0:000> ...

  6. 快速全面了解QT软件界面开发技术

    快速全面了解QT软件界面开发技术     目录 前言 一. 学习QT可能的目的是什么? 只想体验一下QT? 当前的项目选择了用QT. 为将来做QT技术储备. 二. QT的核心技术优势是什么? QT在软 ...

  7. 【大型软件开发】浅谈大型Qt软件开发(二)面向未来开发——来自未来的技术:COM组件。我如何做到让我们的教学模块像插件一样即插即用,以及为什么这么做。

    前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...

  8. 【大型软件开发】浅谈大型Qt软件开发(三)QtActive Server如何通过COM口传递自定义结构体?如何通过一个COM口来获得所有COM接口?

    前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...

  9. 软件调试——CPU异常列表

    CPU异常主要分为三类:错误类异常,陷阱类异常和终止类异常 1 错误类异常 Fault CPU遇到该类异常后,会先将CS和EIP(当前发生错误的指令,而不是下一条指令)压栈,然后跳到异常处理函数中,执 ...

  10. <读书笔记>软件调试之道 :从大局看调试-理想的调试环境

    声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...

随机推荐

  1. Vue 学习笔记 [Part 7]

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 目录 一. Promise 1.0 什么是Promise 1.1. Promise的基本使用 1.2. Promise的链式调用 1.3. Prom ...

  2. 基于语义检索的知识问答(RAG范式)

    知识驱动型AI应用场景 知识驱动型AI应用场景式企业级AI智能体的常见抓手.该类型的场景能充分利用大语言模型的自然语言处理能力,相对独立的提供全新的用户体验.落地该场景,可以在有限的预算内大幅提升企业 ...

  3. UFT RegExp

  4. .NET中全新的MongoDb ORM框架 - SqlSugar

    .NET中好用的MongoDb ORM很少,选择也很少,所以我打造了一款适合SQL习惯的MongoDb ORM,让用户多一个选择. 1. MongoDB ORM教程 1.1 NUGET 安装 SqlS ...

  5. C#/.NET/.NET Core技术前沿周刊 | 第 44 期(2025年6.23-6.30)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  6. vscode路径提示插件Path Intellisense

    安装配置 在应用商店搜索Path Intellisense然后安装,安装之后需要配置 image.png image.png 点击设置按钮,在下拉列表中点击--扩展设置 选项,然后打开setting. ...

  7. MySQL 12 为什么我的MySQL会“抖”一下?

    一条SQL语句,正常执行时候特别快,但有时会变得特别慢,且这种情况很难复现,随机且持续时间很短,看上去像是"抖"了一下. 你的SQL语句为什么变"慢"了 在My ...

  8. 前端开发系列126-进阶篇之Rollup

    本文简单介绍类库打包工具 rollup . Rollup 是一款 JavaScript 模块打包器,可以将多个简单的js代码文件编译成一份复杂的js代码文件,需要注意的是 Rollup 主要用于Jav ...

  9. AtCoder Beginner Contest 184 ABCDE 题解

    A - Determinant 签到. B - Quizzes 签到. C - Super Ryuma 贪心,同时分情况讨论: 1.本身就在范围里面,就1次(特判起始点和终点重合). 2.在两步范围内 ...

  10. HashMap居然可以和它直接合体???

    LinkedHashMap集合继承于HashMap,学习LinkedHashMap重点对比 LinkedHashMap 与 HashMap 的异同 特别强调两者的 Entry(节点)数据结构.数据结构 ...