https://jyywiki.cn/OS/2023/build/lect8.ipynb
调试理论
调试理论:如果我们能判定任意程序状态的正确性,那么给定一个 failure,我们可以通过二分查找定位到第一个 error 的状态,此时的代码就是 fault (bug)。
实际中的调试:观察状态机执行 (trace) 的某个侧面
- 缩小错误状态 (error) 可能产生的位置
- 作出适当的假设
- 再进行细粒度的定位和诊断
最重要的两个工具
- printf → 自定义 log 的 trace
- 灵活可控、能快速定位问题大概位置、适用于大型软件
- 无法精确定位、大量的 logs 管理起来比较麻烦
- gdb → 指令/语句级 trace
- 精确、指令级定位、任意查看程序内部状态
- 耗费大量时间
使用 GDB 调试程序
GDB: 入门
GDB: 最常用的命令在 gdb cheat sheet
想要更好的体验?
- GDB 本身也是一个编程语言
- 它甚至支持 Python
- 我们可以执行一些初始化代码 (-x)
- 库函数也是代码
- GDB 有许多前端
- cgdb, pwndbg, vscode, ...
- RTFM - M 比 ChatGPT 好用在于它不需要 prompt 且全面