C++程序调试方式总结
bug调试要根据应用场景和条件,选择什么样子的调试方式很大程度上不是你想选择什么样的调试方式,而是还剩下什么样子的调试方式可用。下面就根据不同的场景和条件来总结一下。
目录:
1、gdb调试或者IDE自带的调试工具
2、堆栈调用
3、日志打印
4、信号函数捕捉
5、代码静态检测Cppcheck
6、内存泄漏检测valgrind
7、bugly \ breakpad
--------------------------------------正文---------------------------------------------
1、gdb调试或者IDE自带工具调试
最初级,用的最多的调试方式,适用于便开发边调试,无需多言。
https://www.cnblogs.com/wangkeqin/p/12489912.html
2、堆栈调用
适用于隐藏比较深的bug,有时调试模式中意外崩溃,或者程序运行中意外崩溃都可以使用堆栈来查看崩溃。windows中使用VS可以在崩溃中打开堆栈,查看堆栈调用关系。linux端运行中的程序崩溃了,如果需要查看堆栈,需要coredump文件,需要将coredump设定打开。
https://www.cnblogs.com/wangkeqin/p/12493307.html
3、日志打印
适用于不能调试,或者事务类的程序。一般用于追踪程序运行过程或者运行中的数据监控。可以自己写一个日志库,当然也有有很多知名的开源日志库,例如大名鼎鼎的glog。
4、打印堆栈——信号函数捕捉
利用信号钩子函数,获取堆栈信息,然后在日志中打印:
https://blog.csdn.net/Zhanganliu/article/details/88965491
配合addr2line命令 :(待写一篇文章写清楚两者的使用)
5、代码静态检测Cppcheck
代码写好编译过程中输出信息会有很多的warning,看似问题不大的warning往往在实际应用场景中会变成定时炸弹。如果选择用肉眼去修复查找这些warning在实际的工程中缺乏可行性。腾讯出品的Cppcheck是一款非常趁手的静态代码检测工具,可以帮助发现潜在的错误。
linux 命令行:https://www.jianshu.com/p/d71729b0981d
windows: https://blog.csdn.net/hellokandy/article/details/83302859
当然还有一些其他工具也非常优秀,这里给出对比链接。
https://blog.csdn.net/lovespring116/article/details/73504190
6、内存泄漏检测——Valgrind:
主要用于检测运行态的程序,主要针对野指针、内存泄漏等。这里直接给出链接:
https://www.oschina.net/translate/valgrind-memcheck
7、bugly \ breakpad
bugly出于腾讯,主要用于移动端的日志上传,当然如果说是C++的SDK和java/oc混编的程序。C++ SDK中的崩溃信息也可以抓到。breakpad出于google。可以多平台使用。
应用安装到用户那里,什么应用场景下会出问题,不得而知。单纯的日志有时显得苍白无力,幸好有bugly、breakpad这样的工具可以使用,让我们在问题发生后能够有效的分析问题。
https://www.cnblogs.com/MakeView660/p/6077436.html
https://www.jianshu.com/p/295ebf42b05b
最后,如有错误,欢迎指正!如有缺漏,欢迎补充!
C++程序调试方式总结的更多相关文章
- .NET应用程序调试—原理、工具、方法
阅读目录: 1.背景介绍 2.基本原理(Windows调试工具箱..NET调试扩展SOS.DLL.SOSEX.DLL) 2.1.Windows调试工具箱 2.2..NET调试扩展包,SOS.DLL.S ...
- MapReducer程序调试技巧
写过程序分布式代码的人都知道,分布式的程序是比较难以调试的,但是也不是不可以调试,对于Hadoop分布式集群来说,在其上面运行的是mapreduce程序,因此,有时候写好了mapreduce程序之后, ...
- Windbg程序调试--转载
WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件. WinDbg是微软很重要的诊断调试工具: 可以查 ...
- [安卓][转]Android eclipse中程序调试
一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoi ...
- 程序调试手段之gdb, vxworks shell
调试一个程序主要用到的功能: 启动程序 设置函数断点 设置数据断点 单步执行 查看内存值 修改内存值 linux下的gdb,和vxworks下的shell 虽然使用方式和调试命令略有不同,但是都能满足 ...
- Android eclipse中程序调试
一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoi ...
- Linux Bash命令关于程序调试详解
转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...
- C#编程使用到的几种调试方式
一.前言: 使用C#语言从08年算起,到现在也有6个年头的时间了. 但 是会使用调试进行辅助编程的时间,却只有5个年头,其中第一年里面,只能傻傻地敲着老师给的案例,不会写就一遍一遍重复手写编码,上机练 ...
- Keil 程序调试窗口
上一讲中我们学习了几种常用的程序调试方法,这一讲中将介绍Keil提供各种窗口如输出窗口.观察窗口.存储器窗口.反汇编窗口.串行窗口等的用途,以及这些窗口的使用方法,并通过实例介绍这些窗口在调试中的使用 ...
随机推荐
- 密码学系列之:Merkle–Damgård结构和长度延展攻击
密码学系列之:Merkle–Damgård结构和长度延展攻击 简介 Merkle–Damgård结构简称为MD结构,主要用在hash算法中抵御碰撞攻击.这个结构是一些优秀的hash算法,比如MD5,S ...
- Python+API接口测试框架设计(pytest)
1.测试框架简介 整个接口测试框架的设计图如下: base:存放的是请求方法二次封装 common:存放的是自定义工具,操作excel,yaml文件等 data:存放的是公共动态数据,如data.xl ...
- 部署springboot时出现的问题
一.打包出现问题 后经发现是因为maven的打包插件的版本问题,需要修改版本 <plugins> <plugin> <groupId>org.springframe ...
- js里的发布订阅模式及vue里的事件订阅实现
发布订阅模式(观察者模式) 发布订阅模式的定义:它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知. 发布订阅模式在JS中最常见的就是DOM的事件绑定与触发 ...
- odoo接口跨域问题
odoo Controller接口开发 POST请求的跨域问题解决方法 1.odoo Controller接口开发,前端在请求的时候会发生跨域问题,报错信息如下:Function declared a ...
- Java基础——ArrayList方法全解(字典版)
引言 在使用集合 ArrayList 的时候,经常使用add.remove等,其他的没用过,甚至没听说过的还有很多.现在在这个教程中,简单的了解一下,不要求全都记下.相当于在你脑袋里建一个索引,就是有 ...
- 《深入剖析Tomcat》源码
<深入剖析Tomcat>翻译自<How Tomcat Works> 可以到官网下载:https://brainysoftware.com/download 官网下载比较慢,我就 ...
- 【奇妙的JavaScript】# 1
奇妙的JavaScript 本专题整理了一些JavaScript的怪异行为,大部分都是选择题,题目都是简单的表达式.可以测试你有多了解 JavaScript,拓宽你的认知边界! 该专题计划每周更新1- ...
- 模式识别课程大作业 Shopee 商品图像检索
大作业项目简介 在如今的信息科技时代, 带有拍照功能的移动设备如手机.相机等得到了极大的普及和流行, 各种各样的图片和视频可以随时随地获得, 并借助互联网快速传播, 这种趋势使得网络上的数字图片和视频 ...
- CF427C题解
Description 有一张带点权有向图,你要在其中修建若干个检查站,使得对于每一个点 \(p\) ,都有 \(\geq 1\) 个检查站,满足: 存在一条从这个检查站出发到点 \(p\) 的路径: ...