from mosaic import *
OS2023(8)
Changelog & 反馈
背景回顾:在快节奏的《操作系统》课中,插入一些 (重要得要命但与操作系统不完全相关的) 休闲内容。
本讲内容:调试理论:Fault, Error 和 Failure;GDB 使用技巧。
slideshow('8.1')
调试理论给了大家在遇到 “任何问题” 时候 self-check 的列表:
看完之后的例子,你相信对这个过程会有更好的理解。
slideshow('8.2')
没错,我们只要能 “检查状态机的状态”,就可以调试/诊断计算机系统中遇到的 “任何问题”,有些看似莫名其妙的问题,在 trace/log 的帮助下,也就自然有了头绪。
slideshow('8.3')
demo('printf', 'd/printf.c')
demo('nondet', 'd/nondet.c')
demo('mutex', 'd/mutex', libs=['thread.h', 'thread-sync.h'])
slideshow('8.4')
demo('mem-error', 'd/mem-error.c')
Sanitizer 是一类重要的 “动态程序分析”。所谓动态,就是指观察程序的运行 (即状态机的执行)。动态分析能给出许多程序有趣的性质,包括性能和功能性的 bugs。相应地,也有静态程序分析,即不在实际的环境中运行程序,就能对程序的行为作出预测——编译器和编译优化就是一类重要的静态分析。
调试理论:bug 是如何发生的?
残酷的现实和难听的本质
针对你近期调试过的程序,通过配置 GDB、vscode 等,优化你的调试体验。我们建议把这些配置跟随实验框架,这会大幅提升你的实验体验,从而消除你 “我不理解这个也行” 的心态。