C++程序调试方式总结
阅读原文时间:2023年07月08日阅读:1

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

最后,如有错误,欢迎指正!如有缺漏,欢迎补充!