当前位置: 首页 > 文档资料 > FreeBSD 开发手册 >

10.8 用于调试的内核选项术语表

优质
小牛编辑
130浏览
2023-12-01

本节将对用于调试的编译时内核选项进行简要的术语表式介绍:

  • options KDB: 在内核中联编调试器框架。 这是使用 options DDBoptions GDB 的先决条件。 它对性能产生的影响很小, 甚至完全不够成影响。 默认情况下, 如果使用这一选项, 在内核发生崩溃时将进入调试器, 而不是自动重启。

  • options KDB_UNATTENDED: 将 sysctl 变量 debug.debugger_on_panic 的默认值改为 0, 这一变量控制在发生崩溃时是否进入调试器。 当内核中没有编入 options KDB 时, 默认的行为是发生崩溃时自动重启系统; 而如果将其编入内核, 则默认行为是崩溃时进入调试器, 除非您同时指定了 options KDB_UNATTENDED。 如果希望将调试器联编进内核, 但又希望系统在无人值守的情况下自动恢复, 则应使用这一选项。

  • options KDB_TRACE: 将 sysctl 变量 debug.trace_on_panic 的默认值改为 1, 这一变量控制调试器是否自动在发生崩溃时自动显示调用�。 如果使用串口或火线控制台, 特别是在配合 options KDB_UNATTENDED 运行时, 这个选项有助于收集一系列基本的调试信息, 而又不会影响系统重启并恢复服务。

  • options DDB: 将控制台调试器, DDB 的支持联编到内核中。 这个交互式调试器能够在系统中可用的任何低级控制台上运行, 这包括显示器控制台、 串口控制台或火线控制台。 它提供了基本的集成调试机制, 例如显示调用�、 列出进程和线程、 显示锁的状态、 VM 状态、 文件系统状态, 以及管理内核内存。 DDB 并不需要在另一台机器上运行任何软件, 也不能直接生成崩溃核心内存转存或使用完整的内核调试符号, 并提供详细的内核运行环境诊断机制。 尽管如此, 许多问题仍可以直接通过 DDB 输出来进行诊断。 这一选项依赖 options KDB

  • options GDB: 连入远程调试器 GDB 的支持, 它支持通过串口电缆或火线进行操作。 当进入调试器时, 可以挂接 GDB 并观察数据结构的内容、 生成调用�信息等。 在检查某些内核状态时, 这会比使用 DDB 要简单许多, 因为它能够自动生成一些关于内核状态的摘要信息, 例如自动遍历锁的调试信息, 或内核内存管理结构等, 但这种调试需要另一台计算机的参与。 另一方面, GDB 能够配合内核源代码和完整的调试符号使用, 并且了解全部的数据结构定义、 局部变量, 而且可以采用脚本化方式操作。 如果只是在内核核心内存的崩溃转存运行 GDB 的话, 则这一选项并非必需。 此选项依赖 options KDB

  • options BREAK_TO_DEBUGGERoptions ALT_BREAK_TO_DEBUGGER: 允许控制台上的 break 或 alternative 信号使内核进入调试器。 如果系统在没有发生崩溃时停止响应, 则这是一种很有用的进入调试器的方式。 由于目前的内核上锁机制, 串口控制台产生的 break 信号在进入调试器方面更为可靠, 因而也是推荐的方式。 这一选项造成的性能影响微乎其微。

  • options INVARIANTS: 在内核中联编一系列运行时断言检查和测试, 这些测试会持续地检查内核数据结构的完整性, 以及内核算法的正确性。 这类测试可能会产生很大的性能开销, 因此默认情况下并不会联编进内核, 但它能够提供非常有用的 “遇错即停” 行为, 使得系统在发生潜在问题并破坏内核数据结构之前进入调试器, 从而使问题更容易调试。 这类测试包括对内存进行清零等操作, 以及对释放后使用的检查, 而这些都会显著的提高开销。 这个选项依赖于 options INVARIANT_SUPPORT

  • options INVARIANT_SUPPORT: 许多 options INVARIANTS 测试需要修改过的数据结构, 或定义额外的内核符号, 此选项将这些加入内核。

  • options WITNESS: 这个选项会启用运行时的锁逆序追踪和验证, 是诊断死锁时的一个十分有用的工具。 WITNESS 会维护一个所持锁的有向图, 并在线程获锁时检查其中是否有 (直接或间接的) 环路。 如果检测到环路, 则会在控制台显示出警告和调用�, 表示可能会发生潜在的死锁现象。 在使用 DDB 命令 show locksshow witness 以及 show alllocks 时, 必须配合 WITNESS。 这一调试选项会产生显著的性能开销, 但这种性能开销, 可以通过使用 options WITNESS_SKIPSPIN 选项在一定程度上减轻。 关于它的详细介绍, 请参见 witness(4)

  • options WITNESS_SKIPSPIN: 禁用 WITNESS 对自旋锁的锁序检查。 由于自旋锁在调度器中会频繁地持放, 而调度器事件又经常发生, 因此这一选项会显著地改善运行 WITNESS 系统的性能。 此选项依赖 options WITNESS.

  • options WITNESS_KDB: 将 sysctl 变量 debug.witness.kdb 的默认值改为 1, 使 WITNESS 在发生锁逆序时直接进入调试器, 而不是简单地给出警告。 此选项依赖 options WITNESS

  • options SOCKBUF_DEBUG: 对 socket 缓冲区进行高代价的运行时一致性检查, 这在调试 socket 问题, 以及查找与 socket 交互的协议和设备驱动中的竞态条件时非常有用。 这一选项会显著地影响网络性能, 而且可能改变设备驱动竞态条件的时序。

  • options DEBUG_VFS_LOCKS: 追踪 lockmgr/vnode 锁的获持点, 并扩充 DDB 的 show lockedvnods 所能提供的信息范围。 这一选项会产生可观的性能影响。

  • options DEBUG_MEMGUARD: 将 malloc(9) 内核内存分配器替换为一个使用 VM 系统, 并能检测释放后读写内存行为的分配器。 关于这一分配器的具体介绍, 请参见 memguard(9)。 这一选项会产生显著的性能影响, 但在调试内核内存损毁问题时会非常有用。

  • options DIAGNOSTIC: 启用附加的、 代价更高的 options INVARIANTS 诊断测试。