Linux-调试工具-gdb-gprof-valgrind-strace
gprof
使用方法
- 1. 使用 -pg 编译和链接你的应用程序。
- 2. 执行你的应用程序使之生成供gprof 分析的数据。
- 3. 使用gprof 程序分析你的应用程序生成的数据。
- $gprof -b a.out gmon.out
命令格式
-
gprof [可执行文件] [gmon.out文件] [其它参数]
-
方括号中的内容可以省略。如果省略了“可执行文件”,gprof会在当前目录下搜索a.out文件作为可执行文件,而如果省略gmon.out文件,gprof也会在当前目录下寻找gmon.out。其它参数可以控制gprof输出内容的格式等信息。最常用的参数如下:
-
-b 不再输出统计图表中每个字段的详细描述。
-
-p 只输出函数的调用图(Call graph的那部分信息)。
-
-q 只输出函数的时间消耗列表。
-
-e Name 不再输出函数Name 及其子函数的调用图(除非它们有未被限制的其它父函数)。可以给定多个 -e 标志。一个 -e 标志只能指定一个函数。
-
-E Name 不再输出函数Name 及其子函数的调用图,此标志类似于 -e 标志,但它在总时间和百分比时间的计算中排除了由函数Name 及其子函数所用的时间。
-
-f Name 输出函数Name 及其子函数的调用图。可以指定多个 -f 标志。一个 -f 标志只能指定一个函数。
-
-F Name 输出函数Name 及其子函数的调用图,它类似于 -f 标志,但它在总时间和百分比时间计算中仅使用所打印的例程的时间。可以指定多个 -F 标志。一个 -F 标志只能指定一个函数。-F 标志覆盖 -E 标志。
-
-z 显示使用次数为零的例程(按照调用计数和累积时间计算)。
valgrind
- valgrind ./exe
- valgrind --tool=memcheck --leak-check=full ./a.out
- 检测内存泄漏
iPerf2/3
GDB
- GCC编译器支持 -O 和 -g 一起参与编译。
- GCC编译过程对进行优化的程度可分为5个等级,分别为 :
-O/-O0: 不做任何优化,这是默认的编译选项 ;
-O1:使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化。 该模式在编译大型程序的时候会花费更多的时间和内存。在 -O1下:编译会尝试减少代 码体积和代码运行时间,但是并不执行会花费大量时间的优化操作。
-O2:包含 -O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化。 GCC执行几乎所有支持的操作但不包括空间和速度之间权衡的优化,编译器不执行循环 展开以及函数内联。这是推荐的优化等级,除非你有特殊的需求。 -O2会比 -O1启用多 一些标记。与 -O1比较该优化 -O2将会花费更多的编译时间当然也会生成性能更好的代 码。
-O3:打开所有 -O2的优化选项并且增加 -finline-functions, -funswitch-loops,-fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize优化选项。这是最高最危险 的优化等级。用这个选项会延长编译代码的时间,并且在使用 gcc4.x的系统里不应全局 启用。自从 3.x版本以来 gcc的行为已经有了极大地改变。在 3.x,,-O3生成的代码也只 是比 -O2快一点点而已,而 gcc4.x中还未必更快。用 -O3来编译所有的 软件包将产生更 大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为(包括 错误)。这样做将得不偿失,记住过犹不及。在 gcc 4.x.中使用 -O3是不推荐的。
-Os:专门优化目标文件大小 ,执行所有的不增加目标文件大小的 -O2优化选项。同时 -Os还会执行更加优化程序空间的选项。这对于磁盘空间极其紧张或者 CPU缓存较小的 机器非常有用。但也可能产生些许问题,因此软件树中的大部分 ebuild都过滤掉这个等 级的优化。使用 -Os是不推荐的。
启用GDB调试
GDB调试主要有三种方式:
- 直接调试目标程序:gdb ./hello_server
- 附加进程id:gdb attach pid
- 调试core文件:gdb filename corename
退出GDB
-
可以用命令:q(quit的缩写)或者 Ctr + d 退出GDB。
-
如果GDB attach某个进程,退出GDB之前要用命令 detach 解除附加进程。
![]()
![]()
-
设置参数【https://blog.csdn.net/u012611644/article/details/79614598】




浙公网安备 33010602011771号