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提供各种窗口如输出窗口.观察窗口.存储器窗口.反汇编窗口.串行窗口等的用途,以及这些窗口的使用方法,并通过实例介绍这些窗口在调试中的使用 ...
随机推荐
- 学前端的第一门语言HTML
学前端最终要做的就是制作各种各样的网页,html就相当于网页的骨架,所以我们学习前端的第一步就是先学html,接下来学习什么是html. 什么是HTML? HTML指的是超文本标记语言(Hyper T ...
- [刘阳Java]_MyBatis_其他方式来实现多表查询的操作_第9讲
MyBatis其他方式来实现多表查询的操作 利用Java中的集合框架(List,Map) 其中List存储多个查询返回的记录 Map查询返回字段,同时记录表中一条数据 <?xml version ...
- vlc+flv.js 摄像头 H5 直播
背景 业务需求:用最短的时间搞定摄像头直播到Web页面.因为没有过这方面经验,所以走了很多弯路,其实也不算弯路吧,大部分时间花在学习基础概念,寻找快速方案中.惯性思维想当然的以为找组件,配地址就能搞定 ...
- c# 将checkedListBox选择的值保存再数组中并转换成以指定字符连接的字符串
经常忘记,所以记一下: string[] arr =new string[3]; int b = 0; foreach (string outstr in checkedListBox1.Checke ...
- 将base64Url对应图片保存到本地
上图中的内容就是base64编码之后对应的Url 图中base64,之前的都是用于声明该图片的格式以及它的编码格式 base64,之后的就是该图片对应的数据了 我们只需要把数据转换为字节保存下来即 ...
- Wordpress 4.6 任意命令执行漏洞(PwnScriptum)
漏洞存在后台登录地方的找回密码页面:http://192.168.49.2:8080/wp-login.php?action=lostpassword 抓包进行修改包 输入一个存在的用户,然后点击获取 ...
- JSP的执行原理、JSP的内置对象、四大作用域解析、MVC模式理解>从零开始学JAVA系列
目录 JSP的执行原理.JSP的内置对象.四大作用域解析.MVC模式理解 JSP的执行原理 这里拿一个小例子来解析JSP是如何被访问到的 首先将该项目部署到tomcat,并且通过tomcat启动 通过 ...
- Azure安装完postgresql遇到:psql: error: could not connect to server: FATAL: no pg_hba.conf entry for host
进入创建好的Azure Database for PostgreSQL server 点击connection security 在Firewall rules中 Add 0.0.0.0-255.2 ...
- 时间-i春秋
记一道跑脚本的题 进入页面拿到一段代码. <?php header("content-type:text/html;charset=utf-8"); '天下武功唯快不破'; ...
- ubuntu 权限管理设置
最近工作中涉及文件操作的内容较多,所以会出现各种各样的权限不足问题,导致操作失败.下面就来讲解下我碰到这种问题是通过什么的方法解决的 一.用户和权限 用户 是 Linux 系统工作中重要的一环,用户管 ...