名校课程推荐 | MIT《CS 实用工具课程》-程序内省

程序内省

调试器

如果通过打印不能满足你的调试需求,可以使用调试器。

调试器是一种可以让我们和正在执行的程序进行交互的程序,它可以做到:

  • 到达指定行后暂停程序

  • 一次一条指令地逐步执行程序

  • 查看变量的值

  • 其他高级功能

GDB/LLDB

GDBLLDB支持多种类C语言的语言

我们来看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

客服