日志输出与级别——控制 Bochs 在什么事件上记录、记录到哪里
六个级别一条线
Bochs 在运行时会产生不同严重程度的事件。从低到高:
| 关键字 | 含义 | 典型触发 |
|---|---|---|
debug: | 调试级 | 模拟内部状态变化,极多 |
info: | 信息级 | 正常的状态变化(设备初始化、磁盘 I/O) |
warn: | 警告级 | 非致命异常(访问了不存在的 MSR、磁盘读写重试) |
error: | 错误级 | 可恢复错误(DMA 冲突、中断丢失) |
panic: | 致命级 | 不可恢复错误(BIOS 签名错误、CPU triple fault) |
log: | 日志文件 | 指定输出路径 |
action 参数
每个级别后面可以跟 action=xxx 决定 Bochs 遇到这种事件时做什么:
| action 值 | 含义 |
|---|---|
fatal | 终止 Bochs |
ask | 弹出对话框问用户怎么办(ask/continue/fatal) |
warn | 显示警告对话框但继续 |
report | 打印到日志文件或控制台 |
ignore | 什么都不做,静默跳过 |
推荐配置
OS 开发场景
log: bochsout.txt
panic: action=ask
error: action=report
warn: action=report
info: action=report
debug: action=ignore
panic 用 ask——OS 内核崩了(triple fault、segmentation fault 冒泡)时 Bochs 会停住,你可以选择 continue(调试器继续跑)或 fatal(退出)。error 和 warn 写到日志文件方便事后排查。debug 忽略——量太大、通常没用。
经典系统运行场景
log: bochsout.txt
panic: action=ask
error: action=report
warn: action=ignore
info: action=ignore
debug: action=ignore
只关心致命错误和可恢复错误,warn/info/debug 全忽略避免刷屏。
静默模式
log: /dev/null # Linux / macOS
log: NUL # Windows
panic: action=fatal
error: action=ignore
warn: action=ignore
info: action=ignore
debug: action=ignore
完全不输出日志,只在 panic 时终止。适合批量脚本运行。
日志里通常能看到什么
info 级别会记录:
- BIOS 加载完成
- 磁盘镜像打开(路径、几何参数)
- VGA 初始化(显卡型号、显示模式)
- PCI 枚举结果
warn 级别会记录:
- MSR(Model-Specific Register)写入了不存在的寄存器
- 磁盘重试或超时
- DMA 缓冲区溢出
error 级别:
- IDE 控制器超时(磁盘镜像损坏?)
- 中断控制器状态异常
- 页面表访问异常
panic 级别:
- triple fault
- BIOS 镜像不合法
- CPU 检测到不可恢复状态
多级别串联
某些级别可以写多个 action 用逗号分隔:
panic: action=ask, report
先报告再询问。但实践中很少这么用——单级别单 action 更清晰。
日志文件位置
log: 写相对路径,文件会创建在 Bochs 启动时的当前工作目录。用绝对路径可以避免记错位置。在 bochsdbg 下,panic 事件的 ask 对话框里也会显示当前日志文件的完整路径,方便定位。