debug困难之处
bug的出发经历了漫长的过程:
- 需求 → 设计 → 代码 → Fault → Error → Failure
- 我们只能观察到Failure
- 我们可以检查状态的准确性(十分耗时
- 无法观测failure在哪里
调试就是 diff 脑子执行 实际执行
如果我们能找到第一条和预期不同的语句,那么这条语句就是bug语句
调试理论
Oracle机:如果我们能判定任意程序的准确性,那么给定一个failure,可以二分查找第一个error状态

推论:
-
我们所有的努力都在接近第一个error
-
单步调试
-
两种调试工具
printf- 打一个个的点,将性价比最高的打印出来
- 灵活可控,但是精度有限
gdb- 指令级别trace
- 任意查看
- 耗费时间
应用
问题诊断
本地环境:连不上github、命令找不到、库没link
我们可以先找到failure,和正常执行的比较,如果程序能多打印一些东西,我们就能更接近错误的位置。
- strace:可以将程序使用的所有系统调用都打印出来
- curl系统调用找不到:

添加-v或者--verbose让程序打印更多的信息
ssh -v
curl -v