第7章 调试
第7章 调试覆盖13个正式目录坐标,用对象合同、信号轨迹与安全门交付控制台记录、kdump预检、vmcore、crash摘要、watchdog/lockdep/kmemleak证据和恢复日志
学习目标
- 把SysRq、diskdump/kdump、崩溃测试、看门狗、crash、core、lockdep与kmemleak落实为内核对象、控制写入、可观察信号与恢复条件
- 只注入“故障发生后才发现捕获内核、预留内存或远程控制不可用”,定位第7章 调试相对基线的首个分岔
- 交付控制台记录、kdump预检、vmcore、crash摘要、watchdog/lockdep/kmemleak证据和恢复日志,明确区分2013年前后历史轨道与当前上游文档轨道
为什么从这个问题开始
第7章 调试围绕“系统失去响应时,怎样先保全证据再区分崩溃、锁死、死锁和泄漏?”建立贯穿任务:在带串口控制台和快照的测试机中预注册一次可控故障,验证SysRq、kdump与诊断链。先预测对象和信号,再重放参考、单故障与恢复路径;只有守住“调试设施必须在故障前验证,并把触发、首错、转储、分析和恢复分成独立阶段”并交付控制台记录、kdump预检、vmcore、crash摘要、watchdog/lockdep/kmemleak证据和恢复日志,HACK名称或一次成功操作才可能升级为机制证据。
来源合同、时代边界与执行边界
第7章 调试以华章公司发布的中文版完整目录核对高桥浩和主编、杨婷译、机械工业出版社2013年2月版、424页、ISBN 9787111410492,以及8章75个HACK。本站的来源访问级别是 outline-only:目录只能限定覆盖范围,不能支持原书正文、图表、代码、练习或作者判断。
第7章 调试是中文独立教学重构,不是原书翻译、节译或替代品。页面不复制未获得授权的正文,也不从标题臆造原作者的具体操作结论;技术机制另由Linux内核上游文档和工具维护方资料交叉核对。
第7章 调试把两条时间轨道明确分开:历史轨道保留Linux 2.6.18至3.0、RHEL 4、Fedora和CentOS等成书语境;当前轨道依据最新上游文档重新确认接口、配置、默认值和弃用情况。当前结论不能倒灌成2013年原书事实。
第7章 调试涉及模块加载、资源限制、文件系统迁移、网络重配、直通设备、电源状态、SysRq、崩溃和动态探针。页面给出的是实验协议,不是生产命令清单;只有在可丢弃虚拟机或专用测试机具备快照、数据备份、串口/带外控制台、超时和停止条件时,才能执行破坏性步骤。
本页独立事实来源
- 华章中文版完整目录:第7章 调试用它只核对中文版书目信息、8章与75个HACK的正式目录边界。
- Linux SysRq 文档:第7章 调试用它核对键序列、proc接口、能力位与危险操作。
- Linux kdump 文档:第7章 调试用它核对预留内存、捕获内核、vmcore和恢复链。
- Linux lockup watchdog 文档:第7章 调试用它核对soft/hard lockup检测器与阈值。
- Linux lockdep 设计文档:第7章 调试用它核对锁类、依赖链和可能死锁报告。
- Linux kmemleak 文档:第7章 调试用它核对扫描模型、疑似泄漏与误报边界。
正式目录坐标逐项解释
第7章 调试
坐标 1/13:第7章 调试。稳定证据键 LKE-UNIT07-A。 第7章 调试把第7章 调试设为本章证据边界:先声明被测内核、发行版、配置和风险等级,再进入章内HACK;章名本身不算机制说明。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
HACK #52 SysRq键
坐标 2/13:HACK #52 SysRq键。稳定证据键 LKE-UNIT07-B。 第7章 调试把HACK #52 SysRq键绑定能力位、触发通道、串口/控制台和每个键的副作用;同步、重新挂载、终止或重启等动作必须预先分级。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
HACK #53 使用diskdump提取内核崩溃转储
坐标 3/13:HACK #53 使用diskdump提取内核崩溃转储。稳定证据键 LKE-UNIT07-C。 第7章 调试把HACK #53 使用diskdump提取内核崩溃转储绑定捕获内核、预留内存、vmcore、符号和crash分析;只有在可丢弃测试机中验证故障路径,生产环境只执行预检。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
HACK #54 使用Kdump提取内核崩溃转储
坐标 4/13:HACK #54 使用Kdump提取内核崩溃转储。稳定证据键 LKE-UNIT07-D。 第7章 调试把HACK #54 使用Kdump提取内核崩溃转储绑定捕获内核、预留内存、vmcore、符号和crash分析;只有在可丢弃测试机中验证故障路径,生产环境只执行预检。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
HACK #55 崩溃测试
坐标 5/13:HACK #55 崩溃测试。稳定证据键 LKE-UNIT07-E。 第7章 调试把HACK #55 崩溃测试绑定捕获内核、预留内存、vmcore、符号和crash分析;只有在可丢弃测试机中验证故障路径,生产环境只执行预检。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
HACK #56 IPMI看门狗计时器
坐标 6/13:HACK #56 IPMI看门狗计时器。稳定证据键 LKE-UNIT07-F。 第7章 调试把HACK #56 IPMI看门狗计时器绑定检测器、阈值、CPU响应、NMI/定时器来源和panic策略;告警证明症状存在,不直接证明根因。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
HACK #57 NMI看门狗计时器
坐标 7/13:HACK #57 NMI看门狗计时器。稳定证据键 LKE-UNIT07-G。 第7章 调试把HACK #57 NMI看门狗计时器绑定检测器、阈值、CPU响应、NMI/定时器来源和panic策略;告警证明症状存在,不直接证明根因。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
HACK #58 soft lockup
坐标 8/13:HACK #58 soft lockup。稳定证据键 LKE-UNIT07-H。 第7章 调试把HACK #58 soft lockup绑定检测器、阈值、CPU响应、NMI/定时器来源和panic策略;告警证明症状存在,不直接证明根因。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
HACK #59 crash命令
坐标 9/13:HACK #59 crash命令。稳定证据键 LKE-UNIT07-I。 第7章 调试把HACK #59 crash命令绑定捕获内核、预留内存、vmcore、符号和crash分析;只有在可丢弃测试机中验证故障路径,生产环境只执行预检。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
HACK #60 核心转储过滤器
坐标 10/13:HACK #60 核心转储过滤器。稳定证据键 LKE-UNIT07-J。 第7章 调试把HACK #60 核心转储过滤器绑定进程限制、转储过滤、模式、存储空间、凭据与符号;隐私数据和磁盘耗尽是实验边界的一部分。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
HACK #61 生成用户模式进程的进程核心转储
坐标 11/13:HACK #61 生成用户模式进程的进程核心转储。稳定证据键 LKE-UNIT07-K。 第7章 调试把HACK #61 生成用户模式进程的进程核心转储绑定进程限制、转储过滤、模式、存储空间、凭据与符号;隐私数据和磁盘耗尽是实验边界的一部分。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
HACK #62 使用lockdep查找系统的死锁
坐标 12/13:HACK #62 使用lockdep查找系统的死锁。稳定证据键 LKE-UNIT07-L。 第7章 调试把HACK #62 使用lockdep查找系统的死锁绑定锁类、获取顺序、依赖图和报告栈;可能死锁报告需要最小复现,不能直接等同已发生死锁。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
HACK #63 检测内核的内存泄漏
坐标 13/13:HACK #63 检测内核的内存泄漏。稳定证据键 LKE-UNIT07-M。 第7章 调试把HACK #63 检测内核的内存泄漏绑定内存上限、回收/压缩路径、事件计数和牺牲者选择;宿主压力与受控层级压力必须分开。 第7章 调试在该坐标必须留下输入身份、控制前值、单一写入、首个信号、故障传播、撤销结果与版本边界;一次命令成功、平均值改善或最终截图都不足以通过裁决。
三个可操作证据视图
第7章 调试先预注册预测:若只注入“故障发生后才发现捕获内核、预留内存或远程控制不可用”,最先变化的内核对象或信号是什么?选择正式坐标和时间轨道,再逐步重放基线、故障、恢复,最后逐项打开安全门。
对象合同:选择坐标、轨道与阶段
对象—控制—信号合同
第7章 调试
先锁定内核对象和版本,再解释控制写入怎样改变可观测信号。
2.6.18—3.0 历史复现 · 阶段 1/4
冻结对象与版本
- 内核对象
- 第7章 调试涉及的内核、配置、设备和工作负载身份
- 控制写入
- 只读采集版本、配置、拓扑和初始状态,不改变生产对象
- 应见信号
- 第7章 调试的基线身份表与缺失能力清单
- 撤销与边界
- 此阶段无写入;发现身份不一致即停止实验
最小可重现实验协议
- 第7章 调试先冻结内核构建标识、发行版、配置、工具版本、硬件/虚拟设备、工作负载、输入数据、采样窗口和预期输出。
- 第7章 调试在干净快照上运行参考路径,保存控制台记录、kdump预检、vmcore、crash摘要、watchdog/lockdep/kmemleak证据和恢复日志;若基线不稳定,停止而不是用故障结果解释机制。
- 第7章 调试保持其余条件不变,只注入“故障发生后才发现捕获内核、预留内存或远程控制不可用”,记录首个分岔、传播路径、竞争性解释和停止条件。
- 第7章 调试撤销控制并以同一输入重放;恢复不了基线、存在残留对象或缺少版本身份时,结论标记失败或未知。
小结与上架门
- 将SysRq、kdump、看门狗与lockdep转化为调试对象链
- 通过预检缺失注入定位首个分岔
- 交付控制台记录、vmcore、crash摘要与恢复日志
- 区分历史轨道与当前上游文档轨道
- 仅在可丢弃环境中执行破坏性实验
练习与答案
练习
问题 1:第7章 调试
为第7章 调试的稳定证据键 LKE-UNIT07-A 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明第7章 调试在历史轨道与当前轨道的边界。
问题 2:HACK #52 SysRq键
为第7章 调试的稳定证据键 LKE-UNIT07-B 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明HACK #52 SysRq键在历史轨道与当前轨道的边界。
问题 3:HACK #53 使用diskdump提取内核崩溃转储
为第7章 调试的稳定证据键 LKE-UNIT07-C 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明HACK #53 使用diskdump提取内核崩溃转储在历史轨道与当前轨道的边界。
问题 4:HACK #54 使用Kdump提取内核崩溃转储
为第7章 调试的稳定证据键 LKE-UNIT07-D 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明HACK #54 使用Kdump提取内核崩溃转储在历史轨道与当前轨道的边界。
问题 5:HACK #55 崩溃测试
为第7章 调试的稳定证据键 LKE-UNIT07-E 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明HACK #55 崩溃测试在历史轨道与当前轨道的边界。
问题 6:HACK #56 IPMI看门狗计时器
为第7章 调试的稳定证据键 LKE-UNIT07-F 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明HACK #56 IPMI看门狗计时器在历史轨道与当前轨道的边界。
问题 7:HACK #57 NMI看门狗计时器
为第7章 调试的稳定证据键 LKE-UNIT07-G 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明HACK #57 NMI看门狗计时器在历史轨道与当前轨道的边界。
问题 8:HACK #58 soft lockup
为第7章 调试的稳定证据键 LKE-UNIT07-H 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明HACK #58 soft lockup在历史轨道与当前轨道的边界。
问题 9:HACK #59 crash命令
为第7章 调试的稳定证据键 LKE-UNIT07-I 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明HACK #59 crash命令在历史轨道与当前轨道的边界。
问题 10:HACK #60 核心转储过滤器
为第7章 调试的稳定证据键 LKE-UNIT07-J 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明HACK #60 核心转储过滤器在历史轨道与当前轨道的边界。
问题 11:HACK #61 生成用户模式进程的进程核心转储
为第7章 调试的稳定证据键 LKE-UNIT07-K 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明HACK #61 生成用户模式进程的进程核心转储在历史轨道与当前轨道的边界。
问题 12:HACK #62 使用lockdep查找系统的死锁
为第7章 调试的稳定证据键 LKE-UNIT07-L 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明HACK #62 使用lockdep查找系统的死锁在历史轨道与当前轨道的边界。
问题 13:HACK #63 检测内核的内存泄漏
为第7章 调试的稳定证据键 LKE-UNIT07-M 设计一个基线、一个单变量故障、一个内核可观察信号和一个恢复检查,并说明HACK #63 检测内核的内存泄漏在历史轨道与当前轨道的边界。
问题 14:为什么要保留双时间轨道
第7章 调试为什么不能用当前cgroup v2、tracefs或电源接口静默替换原书时期对象?
问题 15:什么时候必须停止实验
第7章 调试在什么条件下不应继续执行内核实验?
六个裁决术语
第7章 调试使用↡第7章 调试中被读取或改变的任务、层级、设备、队列、页、事件或探针、↡第7章 调试中唯一改变对象状态的参数、文件、系统调用或配置步骤、↡第7章 调试中用于比较基线与故障的计数、日志、轨迹、延迟或转储、↡第7章 调试的故障轨迹最早偏离参考轨迹的位置、↡第7章 调试撤销写入或恢复快照后,以同一输入重现基线的断言、↡第7章 调试把原书历史对象映射到目标内核当前接口的显式差分构成最小证据语言;这些术语都指向真实对象、状态或证据,不生成置信度、风险分或装饰性评分。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 内核对象
第7章 调试中被读取或改变的任务、层级、设备、队列、页、事件或探针。
- 控制写入
第7章 调试中唯一改变对象状态的参数、文件、系统调用或配置步骤。
- 可观察信号
第7章 调试中用于比较基线与故障的计数、日志、轨迹、延迟或转储。
- 首个分岔
第7章 调试的故障轨迹最早偏离参考轨迹的位置。
- 恢复检查
第7章 调试撤销写入或恢复快照后,以同一输入重现基线的断言。
- 迁移轨道
第7章 调试把原书历史对象映射到目标内核当前接口的显式差分。