为什么要学习C++软件调试技术?掌握这类技术都有哪些好处?

news/2024/4/20 15:08:09/文章来源:https://blog.csdn.net/chenlycly/article/details/129262574

目录

1、为什么要学习C++软件调试技术?

1.1、IDE调试手段虽必不可少,但还不够

1.2、通过查看日志和代码去排查异常崩溃问题,费时费力,很难定位问题

1.3、有的问题很难复现,可能只在客户的环境才能复现

1.4、为了应对软件在不同环境中出现的各式各样的问题,我们需要掌握足够多的调试排查技术

1.5、掌握高效的调试分析技术,既能提升个人能力,也能体现个人价值

2、C++软件调试技术的主体内容

3、掌握C++软件调试技术都有哪些好处?

3.1、在了解引发异常的常见原因后,在编写代码时更小心

3.2、汇编语言接触的多了,能更好地理解软件底层的运行机制

3.3、排查问题的经验多了,处理新问题就更加得心应手了

3.4、在排查问题的过程中,可以主动地去发掘学习的机会,去扩充自己的视野

3.5、在问题中进步,在问题中总结

3.6、通过排查问题去积累素材,可以用到日常的技术分享与培训中

4、学习软件调试技术的经历与心得分享

4.1、学习软件调试技术经历分享

4.2、做技术分享的一些心得


VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N176https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N176https://blog.csdn.net/chenlycly/article/details/125529931       通过技术分享和线下交流发现,很多C++程序员在软件调试技术这一块都比较欠缺,无论是刚毕业的新手,还是工作多年的老员工。这里面有个人的原因,也有环境的原因。考察一个软件人员的水平,一是要看编码与架构的设计能力,二是要看软件调试能力。软件调试能力在处理项目上线后遇到的各式各样的问题时显得尤为重要。今天我们就来详细聊一下为什么要学习C++软件调试技术,以及学习C++软件调试技术有哪些好处。

1、为什么要学习C++软件调试技术?

       在项目上线后,为了有效地应对软件使用过程中遇到的各式各样的问题,我们需要掌握多种软件调试手段和方法,要掌握常用的软件调试技巧,仅靠单一的技能是远远不够的。

1.1、IDE调试手段虽必不可少,但还不够

       我们在项目开发联调阶段,会使用IDE进行Debug调试,将软件的基本流程和功能调通。由于Debug和Release下的差异,有些在Release版本出现的问题,在Debug下是没有的,没法通过Debug调试去解决的。

        对于有些好复现的问题,我们还可以进行Release下的调试。IDE调试是我们处理问题的最直接、最基本的手段,但IDE调试不能覆盖所有的场景,比如产品进入测试或者发布上线后,有些问题是很难复现的,在Debug下可能是很难复现的,所以没法通过Debug调试去排查。

       产品上线到客户环境后遇到了问题,基本是不可能到客户的环境中去调试代码的。所以仅仅依靠IDE调试去排查问题,是远远不够的。

1.2、通过查看日志和代码去排查异常崩溃问题,费时费力,很难定位问题

       软件的运行日志是我们排查问题的重要手段。软件中的异常主要包括两大类:业务上的异常和软件异常崩溃。对于业务上的异常,可以通过打印日志去排查,在日志中查看软件的运行流程,还可以查看到相关变量的值,还可以结合抓网络包去分析。

       但对于软件异常崩溃,在排查手段与方法上,与业务上的异常排查有很大的不同,一般仅通过日志打印去排查是行不通的,日志中没法找到软件崩溃点,很难找到引发软件崩溃的线索。日志不是排查软件异常崩溃的主要手段,日志仅仅起到辅助的作用,比如我们在找到软件崩溃点及崩溃时的函数调用堆栈后,可以通过日志去查看代码的运行流程及相关变量值去辅助分析引发崩溃的原因。

1.3、有的问题很难复现,可能只在客户的环境才能复现

       有的软件异常问题很难复现,可能只能在客户的网络环境或者PC机器的软硬件环境中才能复现。对于这类问题,一般我们需要使用多种手段和方法去排查,是没法通过IDE调试去解决的。

       如果软件有捕获到异常,生成了包含异常上下文的dump文件,我们可以取来dump文件用Windbg或gdb等调试器进行分析。如果没有生成dump文件,一般需要使用调试器在客户环境中进行动态调试,尝试去捕获异常信息。但在客户的机器上去动态调试有诸多的不便,比如问题很难复现,需要很多的时间去复现,会耽误客户很多的时间;有些安全等级比较高的涉密客户,是不允许在其机器上安装Windbg等调试器的。所以有时我们可以尝试在公司的环境中去复现问题,可能在长时间的拷机后可能会复现。

1.4、为了应对软件在不同环境中出现的各式各样的问题,我们需要掌握足够多的调试排查技术

       为了应对软件在不同环境中出现的各式各样的问题,对问题做出快速的响应,我们要了解引发软件异常的常见原因,要知悉一些问题排查的手段与方法,要熟练使用各种常用的分析工具和调试工具。对于一些复杂的问题,需要将多种方法和手段结合起来,使用多种工具去联合分析。

       但掌握这些知识和技能不是一撮而就的事情,需要脚踏实地来学习,然后把学到的东西应用到实际的项目中,要多动手多实践,在问题中取得进步,在问题中积累经验。

1.5、掌握高效的调试分析技术,既能提升个人能力,也能体现个人价值

       掌握高效的调试分析技术后,可以处理各式各样的软件疑难问题,在处理问题的过程中个人能力和经验都能有效的提升。具备别人不具备的能力,能解决被人解决不了的问题,这样能够更好地体现出对企业的价值,这同时也是个人价值的体现。

2、C++软件调试技术的主体内容

        通过大量的项目实战总结出来的C++调试技术的主要内容如下:

 这个地方我就不再赘述了,C++调试技术的详细内容可以去查看专栏《C++软件调试与异常排查从入门到精通》:

C++软件调试与异常排查从入门到精通专栏https://blog.csdn.net/chenlycly/article/details/125529931

3、掌握C++软件调试技术都有哪些好处?

       掌握大量的软件调试技术之后,最直接的好处就是能高效地分析并解决项目中遇到的各式各样的难题,下面我们来详细看看都有哪些具体的好处。

3.1、在了解引发异常的常见原因后,在编写代码时更小心

       在系统地了解引发C++软件异常的常见原因之后,能让我们在编写代码时考虑的更加谨慎、更加全面,从一开始就把一些问题给规避掉,将问题扼杀在摇篮中。

3.2、汇编语言接触的多了,能更好地理解软件底层的运行机制

       有时我们在排查软件异常时,特别是在缺乏pdb符号库文件时,我们需要用IDA查看相关二进制文件的汇编代码上下文去分析。这样就会接触底层的汇编代码,汇编代码熟悉了以后,就能更好的理解C++程序在CPU中怎么运行的,就能理解很多编程中的一些细节问题。

3.3、排查问题的经验多了,处理新问题就更加得心应手了

       排查的问题越多,见识就越多,积累的经验就越多,这样在排查新的问题时手段就更多,思路会更加开阔,更加得心应手,定位问题的速度会更快。

3.4、在排查问题的过程中,可以主动地去发掘学习的机会,去扩充自己的视野

       在和兄弟组一起联调排查问题时,在帮兄弟项目组排查异常崩溃时,可以查看到其他开发组的代码,可以理解他们代码中好的设计思想。也可以了解到他们模块中的业务流程,对把握整个系统的业务流程有很大的作用。

        我们在日常工作中,要积极主动地发掘这样的学习机会,这些都能有效地扩充我们的视野和认知。

3.5、在问题中进步,在问题中总结

       排查问题的过程,是不断积累经验的过程,是技术取得不断进步的过程。在问题排查出来后,要积极进行思考和总结,进行一些扩散性的延伸与归纳。通过项目实战,能学到很多通过经过实战检验的知识点,能搞懂以前无法理解的知识点,扩充自己的认知范围,对一些点能有更进一步的理解和认识。通过不断的思考与总结,可以形成一套属于自己的完整知识体系。比如我的技术总结专栏《C++软件调试与异常排查从入门到精通》就是总结出来的一套完整的知识体系:

C++软件调试与异常排查从入门到精通专栏https://blog.csdn.net/chenlycly/article/details/125529931

1)通过回顾很多异常问题的引发原因,总结出了《C++软件异常的常见原因分析与总结》一文:
C++软件异常的常见原因分析与总结https://blog.csdn.net/chenlycly/article/details/1249964732)通过回想很多异常问题的排查过程及排查方法,总结出了《排查C++软件异常的常见思路与方法》一文:
排查C++软件异常的常见思路与方法https://blog.csdn.net/chenlycly/article/details/1206293273)根据使用Visual Studio调试程序的实战经验,总结出了《Visual Studio高效调试手段与技巧总结》一文:
Visual Studio高效调试手段与技巧总结https://blog.csdn.net/chenlycly/article/details/1248842254)根据排查问题时的各种内存错误,总结出了《引发C++程序内存错误的常见原因分析与总结》
引发C++程序内存错误的常见原因分析与总结https://blog.csdn.net/chenlycly/article/details/128599525专栏《C++软件调试与异常排查从入门到精通》还有很多其他的文章,感兴趣的可以去专栏中看,这个地方我就不再逐一展开了。

3.6、通过排查问题去积累素材,可以用到日常的技术分享与培训中

       在排查问题的过程中,可以将dump文件、pdb文件和相关代码截图保存下来,可以方便以后去查看,也可以为以后的技术分享与培训积累大量的案例和素材。这样的技术分享会更有内容,更富有实战性。

4、学习软件调试技术的经历与心得分享

       最近几年一直在从事C++软件异常排查的工作,处理了成百上千个软件异常问题,正是通过这些问题的项目实战,积累了大量的经验,并做了详细的总结。《C++软件调试与异常排查从入门到精通》技术总结专栏,正是通过项目实战总结整理出来的:

C++软件调试与异常排查从入门到精通专栏https://blog.csdn.net/chenlycly/article/details/125529931专栏中的内容都是通过项目实战总结出来的实战经验,有很大的参考价值,感兴趣的可以去看一看!

4.1、学习软件调试技术经历分享

        多年前,在遇到软件异常崩溃时排查起来非常吃力,深深地体会到了在C++软件调试方面的不足,并对C++软件调试技术产生了浓烈的兴趣。于是开始系统地学习软件调试方面的技术知识,动手捣鼓一些常用分析工具:

并坚持把这些知识和工具应用到日常的项目中去。

       在学习应用的过程中,同事们也给予了大量的指导与帮助,特别是负责软件异常排查的同事给我分享大量的实战经验。就这样逐渐敲开了C++软件调试的大门,逐步承担起了部门C++软件项目中各种异常崩溃的排查工作。

       在邀请公司技术专家排查项目难题的过程中,跟着专家后面也学到了很多平时学不到的分析经验,以及一些高效的分析工具。一边学习,一边排查问题,一边积累经验。

       对于一些典型的有代表性的问题,事后会进行完整的复盘,搞清楚问题的来龙去脉,并对相关的技术点进行总结与进一步的思考。即便问题出在别的开发组的模块中,我也会主动地帮忙排查,查看他们模块的代码,把问题给搞清楚。在这个过程中,我不仅了解了底层模块的相关代码的设计思想和业务逻辑,还积累了大量的问题素材,为后期的全面总结做好了大量的知识储备。

4.2、做技术分享的一些心得

       通过几年的软件异常排查项目实战,对C++软件调试与异常排查技术进行了系统地总结,并开始对外输出这方面的内容。在公司范围内开始做C++软件调试技术的分享与培训,在培训和交流的过程中发现很多C++程序员在软件调试这一块比较欠缺,无论是刚毕业的年轻人,还是工作多年的老程序员。这其中有一些个人的原因,也有一些环境认知的原因。

培训的过程中大家反映都很强烈,都惊叹于分析工具能如此高效的定位问题,都觉得培训内容很有实战参考价值。但很多人还是没能坚持学习,大多数基本都是三分钟热度,事后并没有主动地去研究去捣鼓常用的分析工具,并没有将相关内容和工具应用到实际的项目中去。

       一门技术的学习,是离不开努力和折腾的,我们需要把手动起来!在我们漫长的职业生涯中,正是通过很多小事件从量变到质变,去实现技术的提升。

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

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

相关文章

短视频美颜sdk人脸编辑技术详解、美颜sdk代码分析

短视频美颜sdk中人脸编辑技术可以将人像风格进行转变,小编认为这也是未来的美颜sdk的一个重要发展方向,下文小编将为大家讲解一下短视频美颜sdk中人脸编辑的关键点。 一、人脸编辑的细分关键点 1、年龄 通过更改人脸的年龄属性,可用于模仿人…

攻不下dfs不参加比赛(七)

标题 为什么练dfs题目总结重点为什么练dfs 相信学过数据结构的朋友都知道dfs(深度优先搜索)是里面相当重要的一种搜索算法,可能直接说大家感受不到有条件的大家可以去看看一些算法比赛。这些比赛中每一届或多或少都会牵扯到dfs,可能提到dfs大家都知道但是我们为了避免眼高手…

AST之path常用属性和方法总结笔记

文章目录1. path常用属性总结1.1 path.node1.2 path.scope1.3 path.parentPath1.4 path.parent1.5 path.container1.6 path.type1.7 path.key2. path常用方法总结2.1 path.toString2.2 path.replaceWith2.3 path.replaceWithMultiple2.4 path.remove2.5 path.insertBefore2.6 p…

Android 蓝牙开发——HCI log 分析(二十)

HCI log 是用来分析蓝牙设备之间的交互行为是否符合预期,是否符合蓝牙规范。对于蓝牙开发者来说,通过 HCI log 可以帮助我们更好地分析问题,理解蓝牙协议。 一、抓取HCI log 1、手机抓取HCI log 在开发者选项中打开启用蓝牙HCI信息收集日志开关,Android系统就开始自动地收…

在中外合作办学硕士领域似乎自己一直在纠结,也许是为了能遇见人大女王金融硕士

2023考研成绩如期而至,还记得考试时的一幕幕吗?在身体被高热侵蚀的情况下,我们似乎很难忘记这次考试所带给我们的经历。如今成绩下来了,可能与我们预期的几乎相同,但是在不断地寻找新的学习途径的过程中我们发现&#…

驾驭云安全:2023年云安全展望

由于其的良好的可扩展性和优质的事件处理效率,云技术已成为现代企业的必备的管理技术之一,目前他已经成为所有行业及企业的热门选择。然而,攻击面积的增加以及不针对云技术衍生出来的多类攻击方式,使许多企业更容易受到威胁和数据…

分层测试(2)单元测试【必备】

1. 什么是单元测试? 对代码中的逻辑隔离的最小代码片段进行测试,验证其逻辑是否符合预期,单元可以是函数,方法,类,功能模块。 2. 单元测试的优点 掌握代码:单元测试允许开发人员了解单元提供…

软件测试之场景法

场景法 1. 概述 1.1 为什么使用场景法设计测试用例 大多数业务软件由后台管理(比如:用户管理、角色管理、权限管理等等各种管理)和工作流等几个部分组成。终端用户,期望软件能够实现业务需求,而不是简单的功能的组合…

2023湖北土建施工员证报考条件考试时间及报考流程 启程别

2023湖北土建施工员证报考条件考试时间及报考流程 启程别 土建施工员证是建设厅七大员中的施工员证的一种。分为土建、装饰装修、市政、设备安装。土建施工员证怎么报考等一系列相关问题启程别告诉你 施工员证报考条件 其实施工员证的报考条件没有那么复杂,基本上年…

智慧扫码点餐系统源码

智慧餐厅扫码点餐小程序系统源码 1. 开发语言:JAVA 2. 数据库:MySQL 3. 原生小程序 4. Saas 模式 5. 带调试部署视频 6、总后台管理端商家端门店端小程序用户端 智慧扫码点餐系统支持多店铺运营,单店铺运营以及连锁店铺运营。系统功能支…

numpy常用操作

文章目录1 numpy库2 数组对象 ndarray2.1 数组对象的创建2.1.1 利用array函数创建ndarray对象2.1.2 np.ones()和np.zeros()函数2.1.3 np.random.rand()函数2.1.4 np.arange()函数2.1.5 np.linspace()函数2.1.6 np.empty()函数2.2 ndarray对象常用属性2.3 ndarray常用操作2.3.1 …

IAP初探

IAP(In-Application Programming)在应用编程,浅显易懂,按照字面意思即是在程序不关闭情况下,对应用进行再次写入程序,对程序的写入需要传输数据,而传输数据的前提是通信, IAP对代码进行更新可以简要分为以…

为什么需要学习shell、shell的作用

课程基于B站于超课程笔记 03 Shebang的正确玩法_哔哩哔哩_bilibili P1 shell的作用 P2 shell执行命令的流程 P3 Shebang的正确玩法 什么是shell及组成 shell概念 shelll组成 Shebang概念 /bin/sh /bin/bash一样,都是指向一个bash解释器 [rootlocalhost ~]#…

医疗床头卡(WIFI方案)

一、产品特性 7.5寸墨水屏显示WIFI无线通信,极简部署,远程控制按键及高亮LED指示灯指示800*480点阵屏幕锂电池供电,支持USB充电DIY界面支持文本/条码/二维码/图片超低功耗/超长寿命,一次充电可用一年基于现有Wifi环境&#xff0c…

Unity EasyObjectPool2.0 对象池插件

效果展示 运行时: 非运行时: 功能列表 支持预加载 支持动态扩容 支持代码新建pool 支持可视化内存管理 支持常规对象池化管理 支持延迟回收 工厂方法和案例 //生成var bullet EasyObjectPool.GetInstance().Spawn( "bullet" );//回收EasyObjectPool.GetInstanc…

模拟微信聊天-课后程序(JAVA基础案例教程-黑马程序员编著-第八章-课后作业)

【案例9-1】 模拟微信聊天 【案例介绍】 1.案例描述 在如今,微信聊天已经人们生活中必不可少的重要组成部分,人们的交流很多都是通过微信来进行的。本案例要求:将多线程与UDP通信相关知识结合,模拟实现微信聊天小程序。通过监…

微电影广告的内容突破方案

微电影作为新媒体时代背景的产物,深受大众的欢迎,同时,微电影广告在微电影模式环境下应运而生,以自己独特的传播优势,俘获了大量企业主的青睐,也获得了广大青年群体的喜爱。微电影广告欲确保可持续发展&…

springboot+pgbouncer+postgres数据库连接池集成方案及问题解决

期望通过每一次分享,让技术的门槛变低,落地更容易。 —— around 前言 旨在解决微服务项目全是连接池并影响数据库并发连接,作者的环境是基于sprongboot微服务连接postgres数据库,每个微服务的DAO层配置都使用了连接池技术。后续…

PGLBox 超大规模 GPU 端对端图学习训练框架正式发布

作者 | PGLBox项目组 导读 PGLBox是百度研发的基于GPU的大规模图模型训练框架,支持数百亿节点和边的图模型全GPU训练,已在百度广泛部署。相比业界主流的分布式 CPU 解决方案,PGLBox 具有超高性能、超大规模、算法丰富、灵活易用、落地广泛等优…

复习知识点十之方法的重载

目录 方法的重载 练习1: 练习1: 数组遍历 练习2: 数组的最大值 练习3: 练习4: 复制数组 基本数据类型和引用数据类型 方法的重载 Java虚拟机会通过参数的不同来区分同名的方法 练习1: public class Test4 {public static void main(String[] args) {//调用方法 // …