常用工具
trace-cmd - interacts with Ftrace Linux kernel internal tracer
trace-cmd 以交互式的方式用来追踪内核函数,它是 Ftrace 的前端。
使用请参考:
kernelshark - graphical reader for trace-cmd(1) output
kernelshark 用来图形化的显示 trace-cmd 的输出结果。
使用请参考:
strace - trace system calls and signals
strace是一个用于Linux的诊断、调试的用户空间工具。它可以用来查看和修改进程与Linux内核之间的交互行为,其中包括系统调用、信号传递和进程状态。
使用参考:
gcore - Generate a core file of a running program
可以生成正在运行的程序的core文件,这个core 文件与程序崩溃时生成的 core 文件一致,但是使用 gcore 不会影响原程序的运行。
sudo gcore {pid}
gdb - The GNU Debugger
下面的步骤可用来查看运行的进程的栈帧信息。
$ sudo gdb
(gdb) attach {pid}
(gdb) info threads
(gdb) thread apply all bt
(gdb) p mutex1
(gdb) detach
比如,如果出现 deadlock,会出现如下信息:
Thread 0x7f4a8303b700 (LWP 3790) "a.out" __lll_lock_wait (
futex=futex@entry=0x55c928122080 <mtx2>, private=0) at lowlevellock.c:52
gprof - display call graph profile data
Gprof是一个性能分析程序,用来收集和整理程序的统计数据。它通过在每个函数的头部和尾部插入代码,以收集时间信息。当正常运行的程序时,它会创建包含原始数据的"gmon.out",然后 gprof 程序将其转化为统计数据进行展示。
使用步骤如下
- 添加
-pg
的编译选项 - 运行一次程序
- 生成统计数据
gcc -pg test.c -o test
./test
gprof test gmon.out > analysis.txt
注:如果不先运行一次程序,就会出现如下错误: gmon.out no such file or directory
。因为只有程序运行后才会产生 gmon.out。