C语言调试和分析工具
gprof
gprof 是 GNU Profiler 的简称,是一个用于性能分析的工具,主要用于分析 C、C++ 以及其他支持的编程语言编写的程序。它的主要功能是帮助开发者找出程序的性能瓶颈,从而优化代码。gprof 的工作原理是通过插入代码段来记录程序的运行时间和调用关系,然后生成性能分析报告。
在Makefile中添加-pg
使用gprof之前,要先在Makefile的编译器中添加-pg,可以在icc后面添加,也可以在CCFLAGS后面添加
使用gprof分析
(1)在终端直接输入gprof ./main,可以在终端直接看到gprof的分析结果
(2)在执行gprof ./main命令之后,项目文件会生成gmon.out文件,可以将gmon.out中的分析结果存储在txt文件中。因此可以在终端直接输入命令gprof ./main gmon.out > analysis.txt。执行完命令之后,项目文件中会出现analysis.txt文件,文件中包含gprof的分析结果。之后可以输入命令cat analysis.txt直接查看结果。
gprof的分析结果
valgrind
Valgrind 是一个用于内存调试、内存泄漏检测和性能分析的工具框架。它主要用于 C 和 C++ 程序,但也支持其他使用类似内存管理模型的编程语言。Valgrind 提供了一组工具,可以帮助开发者检测程序中的内存错误、内存泄漏、并发错误等问题,从而提高程序的稳定性和性能。
memcheck
这是 Valgrind 最常用的工具,用于检测内存错误,如非法读取和写入、使用未初始化的内存、内存泄漏等
首先要在makefile中添加关于memcheck的命令
之后直接输入make memcheck命令,执行命令,终端便会显示内存的检测结果
callgrind和Cachegrind
Callgrind:用于分析程序的调用图和性能瓶颈,Cachegrind:用于分析程序的缓存使用情况和性能。
输入命令valgrind --tool=callgrind ./main
执行命令后,项目中会生成callgrind.out.xxx文件
用kcachegrind可以可视化函数调用结果,输入命令kcachegrind callgrind.out.xxx
kcachegrind可视化结果
输入命令callgrind_annotate callgrind.out.xxx,可以查看文件分析结果
gdb
GDB(GNU Debugger)是 GNU 项目的一部分,是一个功能强大的调试器,主要用于调试 C、C++ 和其他支持的编程语言编写的程序。GDB 允许程序员在程序运行时进行调试,包括设置断点、单步执行代码、检查变量和内存等。