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提供各种窗口如输出窗口.观察窗口.存储器窗口.反汇编窗口.串行窗口等的用途,以及这些窗口的使用方法,并通过实例介绍这些窗口在调试中的使用 ...
随机推荐
- Antilibrary能拯救稍后不读吗
从「稍后再读」到「再也不读」 上学时,我有一套自认为很高效的资料搜集工作流.大致流程是浏览到感兴趣或可能有用的信息时,粗略扫过一眼后即用 Pocket 将其保存为稍后再读,随后借助 IFTTT 的某个 ...
- C语言:常用数学函数
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <time.h> # ...
- Java基础00-函数式接口33
1. 函数式接口 1.1 函数式接口概述 代码示例: 定义一个接口: //次注解表示该接口为函数式接口,只能有一个抽象方法,如果有第二个就会报错. @FunctionalInterface publi ...
- Java基础00-常用API24
1. Math Math 1.1 Math类概述 1.2 Math类的常用方法 返回绝对值:是正数是时候直接返回参数本身,是负值的时候返回的是参数的相反数.参数是10时返回的是10,参数是-10的时候 ...
- [002] - JavaSE面试题(二):基本数据类型与访问修饰符
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [002] - JavaSE面试题(二):基本数据类型与访问修饰符 第1问:Java的数据类型有哪 ...
- flutter实战demo,仿luckin coffee。
flutter_luckin_coffee flutter luckin coffee application(仿瑞幸咖啡) 目录 前言 安卓扫码体验 flutter版本信息 安装 相关插件 维护者 ...
- 第四篇--Beyond Compare4 试用期30天后
30天后删除BCUnrar.dll这个文件,继续使用30天.还有就是注册表中regedit-->HEKY_CURRENT_USER-->Software-->Scooter Soft ...
- 插入排序(insertion_sort)——Python实现
# 插入排序 # 作用:对给出的n个顺序不定的数进行排序 # 输入:任意数组A # 输出:按顺序排列的数组A # 时间复杂度 n(n-1) 至 (n(n-1))/2 # 插入排序过程 # 第一 ...
- rabbitmq消息处理-转载
目录 1. 消息如何保障百分之百的投递成功? 1.1 方案一:消息落库,对消息状态进行打标 1.2 方案二:消息的延迟投递,做二次确认,回调检查 2. 幂等性 2.1 幂等性是什么? 2.2 消息端幂 ...
- 8.8考试总结(NOIP模拟33)[Hunter·Defence·Connect]
无法逃避的是自我,而无法挽回的是过去. 前言 还算可以,不过 T1 少 \(\bmod\) 了一下挂了 25pts,T2 没看清题面挂了 27pts. 下回注意吧.. T1 Hunter 解题思路 感 ...