名校课程推荐 | MIT《CS 实用工具课程》-程序内省
程序内省
调试器
如果通过打印不能满足你的调试需求,可以使用调试器。
调试器是一种可以让我们和正在执行的程序进行交互的程序,它可以做到:
到达指定行后暂停程序
一次一条指令地逐步执行程序
查看变量的值
其他高级功能
GDB/LLDB
我们来看example.c的例子。用调试标签gcc -g -o example example.c
进行编译
打开GDB
gdb example
一些命令:
run
- 启动被调试的程序b {name of function}
- 设置断点b {file}:{line}
- 设置断点c
- 继续step
/next
/finish
- step in(移动到下一个可执行的代码行)/ step over(在同一个调用栈层中移动到下一个可执行的代码行)/ step out(在栈中前进到下一层并在调用函数的下一行停止)p {variable}
- 打印变量值watch {expression}
-设置观察点,当表达式的值有变化时触发它rwatch {expression}
- 设置观察点,当表达式被读时触发它layout
PDB
PDB 是Python调试器。
插入import pdb; pdb.set_trace()
进入pdb调试环境,基本上是调试器(如GDB)和Python shell的混合。
Web浏览器开发者工具
这是另一种调试器,它使用的是图形化界面。
Strace
跟踪程序执行的系统调用:strace {program}
性能分析
性能分析类型:CPU、内存等
最简单的分析工具:time
Go
用CPU性能分析工具运行测试代码:go test -cpuprofile=cpu.out
分析性能:go tool pprof -web cpu.out
用内存性能分析工具运行测试代码:go test -memprofile=cpu.out
分析性能:go tool pprof -web mem.out
Perf
执行某个命令收集基础性能数据:perf stat {command}
用性能分析工具对记录的数据文件进行分析:perf record {command}
分析性能:perf report