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

news2024/11/14 19:10:48

目录

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.coloradmin.cn/o/377334.html

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

相关文章

主打的就是I/O流,顺便把File复习了

文章目录1. File类1.1 预备知识1.2 创建文件1.3 文件的常用方法2. IO流2.1 InputStream2.2 OutputStream2.3 Reader2.4 Writer2.5 缓冲流2.6 转换流2.7 对象流2.8 打印流1. File类 1.1 预备知识 文件分隔符 Windows:D:\Soft\QQ\PluginLinux:D:/Soft/QQ…

SpringMVC使用 redis 实现缓存

简介 SpringMVC 中也可以将缓存标签和 redis 结合起来使用,其实此时缓存没有起作用,只是通过缓存的那几个注解来操作 redis 而已;SpringMVC 中整合 redis 比较麻烦的是注意版本冲突的问题,如下是官网有关于版本的要求 https://d…

【人脸识别】DDL:数据分布知识蒸馏思想,提升困难样本(遮挡、低分辨率等)识别效果

论文题目:《Improving Face Recognition from Hard Samples via Distribution Distillation Loss》 论文地址:https://arxiv.org/pdf/2002.03662v3.pdf 代码地址:https://github.com/HuangYG123/DDL 1.前言及相关工作 Large facial variatio…

秒懂算法 | 基于图神经网络的推荐算法

图神经网络(Graph Neural Networks,GNN)是近几年兴起的学科,用来作推荐算法自然效果也相当好,但是要学会基于图神经网络的推荐算法之前,需要对图神经网络自身有个了解。 图卷积网络(Graph Convolutional Networks,GCN)提出于2017年。GCN 的出现标志着图神经网络的出现。深度学习…

大家一起来找茬,新手第一次layout到底能挑出多少毛病?

有一个新手工程师在论坛上发了一篇帖子,把自己的处女PCB布线图贴出来。 如果不看其他网友的评论,你能看出多少问题呢?可以在留言区和我们互动哦~ 帖子里他还提出了自己的小见解:问一下,我觉得自动布线挺好用的啊&#…

汽车标定知识整理(一):标定简介与CCP报文协议简介

目录 一、什么是标定 二、XCP与CCP 三、CCP报文协议简介 1、CCP报文协议简介 (1)CRO:Command Receive Object ,命令接收对象(由Master -> Slave) (2)DTO:Data T…

Kotlin 39. Dependency Injection依赖注入以及Hilt在Kotlin中的使用,系列2:手动依赖注入

一起来学Kotlin:概念:26. Dependency Injection依赖注入以及Hilt在Kotlin中的使用,系列2:手动依赖注入 此系列博客中,我们将主要介绍: Dependency Injection(依赖注入) 概念介绍。…

当IDEA加载一个MAVEN新项目时,加载不成功,无法加载依赖的解决方法

当IDEA加载一个MAVEN新项目时,加载不成功,无法加载依赖的解决方法 此文为练习项目时的错误记录 当使用IDEA引入一个MAVEN新项目时,点击Reload maven按钮加载不成功,显示如下图界面: 在项目中的代码显示报红&#xff0c…

urllib之ProxyHandler代理以及CookieJar的cookie内存传递和本地保存与读取的使用详解

处理更高级操作时(Cookies处理,代理设置),需要一个强大的工具Handler,可以理解成各种处理器,有处理登录认证的、有处理Cookies的、有处理代理设置的。利用这些几乎可以做到HTTP请求中所有事情。当中urllib.request模块里的 BaseHa…

机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测

机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测 作者:AOAIYI 作者简介:Python领域新星作者、多项比赛获奖者:AOAIYI首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞…

MySQL实战解析底层---基础架构:一条SQL查询语句是如何执行的?

目录 前言 连接器 查询缓存 分析器 优化器 执行器 前言 平时使用数据库,看到的通常都是一个整体比如,有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时: 看到的只是输入一条语句,返回…

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

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

Android App异常崩溃处理详解

异常崩溃是Android项目中一个棘手的问题,即使你做了很多的try - catch处理,也不能保证不崩溃,一旦崩溃就会出现下图的弹窗,xx应用就会停止运行这种体验对于用户来说是很差的,所以很明显我们做的app已经崩溃了。 像现在…

社科院与杜兰大学金融管理硕士项目——在这里共同改变,一起前行

人这一生,要走很长的路,才能确定前行的方向,在路上遇到很多的人,才知道与谁同行。在人生旅程中,保持怎样的姿态前行,往往与身边的人有很大关系。身边的人都很努力,你也会跟着努力上进。怀揣着在…

Synchronized,我要一层一层剥开你的心

三种应用方式 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁。修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁。修饰代码块,指定加锁对象,对给定对象加锁&a…

TypeScript 使用 ES6 解构骚操作

TypeScript 使用 ES6 解构骚操作 文章目录TypeScript 使用 ES6 解构骚操作一、TypeScript 对象解构二、TypeScript 函数参数解构四、参考资料💘五、推荐博文🍗一、TypeScript 对象解构 我们都知道 ES6 的数据解构功能很强大,一行命令就能够声…

HTMLCSS常见问题解决

文章目录一、解决img图片底部空白问题1、出现问题的效果2、原理3、解决方式3.1、将图片变为盒子3.2、处理基线3.3、把上级元素的字体大小改成0像素二、解决给子元素设置margin-top父子盒子都向下移动问题1、出现问题的效果2、原理3、解决方式3.1、给父元素设置边框3.2、给父元素…

程序员多赚20k的接私活必备网站

为什么都是程序员,就有人能多赚20k?那是因为副业搞得那么溜啊! 今天分享一些程序员搞钱必备的接私活网站,让更多程序员们在工作之余能有另外一份收入。 1.程序员客栈:http://proginn.com 专为程序员服务的软件外包对…

跨境电商代购系统演示说明

首先来看什么是淘宝代购淘宝代购是近年兴起的一种购物模式,是帮国外客户购买中国商品。主要是通过万邦 科技的外贸代购系统,把淘宝、天猫等电商平台的全站商品通过API 接入到你的网站 上,瞬间就可以架设一个有数亿产品的大型网上商城&#xf…

FATE联邦学习centos成功部署

官方文档:https://fate.readthedocs.io/en/latest/deploy/standalone-deploy/#1-description。 我用的文档中的Standalone的第二种安装方式,没用docker。 安装过程 文档上写着确定版本 export version1.7.0但是你别真的用1.7.0啊! &#…