Qt 软件调试——windbg初篇(一)

在上一篇《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;
}

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

1.2 使用windbg调试程序

1.2.1 在windbg中启动演示程序

在这里插入图片描述
程序进入中断等待调试状态
在这里插入图片描述

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

在这里插入图片描述
也可以通过命令设置:

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

在这里插入图片描述

1.2.3 下断点进行调试

【断点设置方法1】:已知模块名进行设置
在这里插入图片描述
【断点设置方法2】:指定文件中的某行设置断点

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

在这里插入图片描述
【断点设置方法3】:通过指定起始地址,批量设置断点
在这里插入图片描述

在这里插入图片描述

1.2.4 调试

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

在这里插入图片描述

.restart	// 重启调试	
qd		    // 退出调试

更多调试指令,在本系列加下来的篇章中我们再做更多介绍~

二、参考文章

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/200454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RPG项目01_层级设置

基于“RPG项目01_UI面板Game”&#xff0c; 找到狼人 添加组件&#xff0c;让狼人一定区域自动跟随主角进行攻击 解释&#xff1a;【烘培蓝色】因为如果什么都不做就会被烘培成蓝色对应的功能就是 可修改区域功能 当将区域设置成不可行走状态&#xff0c;则不为蓝色 烘培&…

手机备忘录在哪里找出来?

谈及手机备忘录&#xff0c;每一个品牌的手机大家都能找到很多&#xff0c;现在各大手机品牌都开发的有自带的手机备忘录&#xff0c;所以说&#xff1a;手机备忘录在哪里找出来并不难&#xff0c;即便是手机自带的没有备忘录工具&#xff0c;大家也是可以通过手机应用市场搜索…

在AWS EC2中部署和使用Apache Superset的方案

大纲 1 Superset部署1.1 启动AWS EC21.2 下载Superset Docker文件1.3 修改Dockerfile1.4 配置管理员1.5 结果展示1.6 检查数据库驱动1.7 常见错误处理 2 Glue&#xff08;可选参考&#xff09;3 IAM与安全组3.1 使用AWS Athena3.2 使用AWS RedShift或AWS RDS3.2.1 查看AWS Reds…

【电子取证篇】汽车取证数据提取与汽车取证实例浅析(附标准下载)

【电子取证篇】汽车取证数据提取与汽车取证实例浅析&#xff08;附标准下载&#xff09; 关键词&#xff1a;汽车取证&#xff0c;车速鉴定、声像资料鉴定、汽车EDR提取分析 汽车EDR一般记录车辆碰撞前后的数秒&#xff08;5s左右&#xff09;相关数据&#xff0c;包括车辆速…

Redis击穿(热点key失效)

Redis击穿是指在高并发情况下&#xff0c;一个键在缓存中过期失效时&#xff0c;同时有大量请求访问该键&#xff0c;导致所有请求都落到数据库上&#xff0c;对数据库造成压力。这种情况下&#xff0c;数据库可能无法及时处理这些请求&#xff0c;导致性能下降甚至崩溃。 为了…

熟悉tomcat的哪些配置?

Tomcat是一种常用的Java Web服务器&#xff0c;它提供了许多配置选项来控制其行为和性能。以下是一些常见的Tomcat配置&#xff1a; 端口配置&#xff1a;你可以配置Tomcat监听的端口号&#xff0c;通常用于指定HTTP和HTTPS服务的端口。连接池配置&#xff1a;Tomcat的连接池可…

基于openEuler20.03安装openGauss5.0.0及安装DBMind

基于openEuler20.03安装openGauss5.0.0及安装DBMind 一、环境说明二、安装部署三、问题及解决 一、环境说明 虚拟机&#xff1a;VirtualBox操作系统&#xff1a;openEuler20.3LTS &#xff08;x86&#xff09;数据库&#xff1a;openGauss5.0.0 (x86)DBMind&#xff1a;dbmind…

Pytest自动化测试数据驱动yaml/excel/csv/json

数据驱动 数据的改变从而驱动自动化测试用例的执行&#xff0c;最终引起测试结果的改变。简单说就是参数化的应用。 测试驱动在自动化测试中的应用场景&#xff1a; 测试步骤的数据驱动&#xff1b;测试数据的数据驱动&#xff1b;配置的数据驱动&#xff1b; 1、pytest结合…

Linux gtest单元测试

1 安装git sudo apt-get install git2 下载googletest git clone https://github.com/google/googletest.git3 安装googletest 注意1: 如果在 make 过程中报错,可在 CMakeLists.txt 中增加如下行,再执行下面的命令: SET(CMAKE_CXX_FLAGS “-std=c++11”) 注意2: CMakeLists…

Django回顾6

目录 一.Session 1.什么是Session 2.Django中Session相关方法 3.Django中的Session配置 二.中间件 1.什么是中间件 中间件的定义 2.中间件有什么用 3.自定义中间件 process_request和process_reponse &#xff08;1&#xff09;导入 &#xff08;2&#xff09;自定义…

5G常用简称

名称缩写全称缓冲区状态报告BSRBuffer Status Report&#xff08;主小区组MCGMaster Cell groupMCG的节点MNMasternode主小区PCellPrimary Cell&#xff0c;功率余量PHRPower Headroom Report主辅小区PSCellPrimary Secondary CellSCG的节点SNSecondarynode辅小区SCellSecondar…

centos安装node 、npm 、nvm

你好&#xff0c;这是Bing。我可以帮你用nodejs写一个http服务器。&#x1f60a; 根据我的搜索结果&#xff0c;你需要使用 require 指令来加载和引入 http 模块&#xff0c;然后使用 http.createServer 方法来创建一个服务器实例&#xff0c;最后使用 listen 方法来监听一个端…

优化您的Mac体验——System Dashboard Pro for Mac(系统仪表板)

作为Mac用户&#xff0c;我们都希望能够拥有一个高效、流畅的电脑体验。然而&#xff0c;在长时间使用后&#xff0c;我们的Mac可能会变得越来越慢&#xff0c;导致我们的工作效率下降。这时候&#xff0c;System Dashboard Pro for Mac(系统仪表板)就可以派上用场了。它是一款…

JAVA常见问题解答:解决Java 11新特性兼容性问题的六个步骤

引言&#xff1a; 随着技术的不断发展&#xff0c;Java作为一种被广泛使用的编程语言&#xff0c;也在不断更新和改进。Java 11作为Java的最新版本&#xff0c;带来了许多新的特性和改进。然而&#xff0c;对于一些老旧的Java应用程序来说&#xff0c;升级到Java 11可能会带来一…

使用Rust Rayon库提升程序运行速度

本文是对 N倍性能提升&#xff01;无痛Rust并行编程&#xff1a;Rayon库初体验[1]的学习与记录 有这样一段程序&#xff0c;计算1到1亿的连续数字之和 use std::i64;fn main() { let arr:Vec<i64> (1..1_0000_0000).collect(); let result sum_of_add(&arr);…

输出SearchFacesResponse对象的JSON格式字符串回包乱码解决方案

输出SearchFacesResponse对象的JSON格式字符串设置响应内容类型为"application/json;charsetutf-8"获取响应的字符输出流将SearchFacesResponse对象转化为JSON字符串并输出。 代码片段 System.out.println(SearchFacesResponse.toJsonString(resp)); response.setC…

创建腾讯云存储桶---上传图片--使用cos-sdk完成上传

创建腾讯云存储桶—上传图片 注册腾讯云账号https://cloud.tencent.com/login 登录成功&#xff0c;选择右边的控制台 点击云产品&#xff0c;选择对象存储 创建存储桶 填写名称&#xff0c;选择公有读&#xff0c;私有写一直下一步&#xff0c;到创建 选择安全管理&#…

为什么C语言用int *a 来声明指针变量,而不是int a声明?

为什么C语言用int *a 来声明指针变量&#xff0c;而不是int &a声明&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「C语言从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c…

HTTP请求

前言 HTTP是应用层的一个协议。实际我们访问一个网页&#xff0c;都会像该网页的服务器发送HTTP请求&#xff0c;服务器解析HTTP请求&#xff0c;返回HTTP响应。如此就是我们获取资源或者上传资源的原理 HTTP请求报头格式 图片来自网络 HTTP请求报头总体有四部分&#xff1a;…

Day38| Leetcode 509. 斐波那契数 Leetcode 70. 爬楼梯 Leetcode 746. 使用最小花费爬楼梯

快补&#xff01; Leetcode 509. 斐波那契数 题目链接 509 斐波那契数 class Solution { public:int fib(int n) {if(n<1){return n;}vector<int> dp(n1);dp[0] 0;dp[1] 1;for(int i2;i<n;i){dp[i] dp[i-1]dp[i-2];}return dp[n];} }; Leetcode 70. 爬楼梯 …