跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 系统分析和微调指南 / 内核监控 / 动态调试 - 内核调试消息
适用范围 SUSE Linux Enterprise Server 15 SP6

8 动态调试 - 内核调试消息

动态调试是 Linux 内核中的一项强大的调试功能,它允许您在运行时启用和禁用调试消息,而无需重新编译内核或重引导系统。

您可以在以下几种情况下使用动态调试,例如:

  • 内核问题查错

  • 为新硬件开发驱动程序

  • 跟踪和审计安全事件

8.1 动态调试的优势

下面列出了动态调试的某些优势:

实时调试

动态调试支持在不重引导系统的情况下调试消息。这种实时功能对于诊断生产环境中的问题至关重要。

选择性调试

您可以为内核的特定部分甚至单个模块启用调试消息,从而将重点放在相关信息上。

性能微调

使用动态调试来监控和优化内核性能,只需根据当前的分析要求选择性地启用或禁用调试消息。

8.2 检查动态调试的状态

默认安装的受支持内核版本已内置动态调试。要检查动态调试的状态,请以 root 用户身份运行以下命令:

# zcat /proc/config.gz | grep CONFIG_DYNAMIC_DEBUG

如果动态调试已编译到内核中,您应该看到类似于以下内容的输出:

CONFIG_DYNAMIC_DEBUG=y
CONFIG_DYNAMIC_DEBUG_CORE=y

8.3 使用动态调试

要在正在运行的内核中启用特定的调试消息或日志,您可以使用 echo 命令向 /sys/kernel/debug/dynamic_debug/control 文件写入数据。

以下示例说明了动态调试的一些简单用法:

注意
注意

动态调试依赖于内核代码中所嵌入的特定调试宏,例如 pr_debug。内核开发人员使用这些宏将调试消息插入到代码中。

本节中的示例假设 pr_debug 宏正常工作,因为允许对正在运行的内核进行动态调试。

为特定内核源代码文件启用调试消息

要为特定内核源代码文件启用调试消息,请使用以下示例:

# echo "file FILE_NAME.c +p" > /sys/kernel/debug/dynamic_debug/control
为特定内核模块启用调试消息

要为特定内核模块启用调试消息,请使用以下示例:

# echo "module MODULE_NAME +p" > /sys/kernel/debug/dynamic_debug/control
禁用调试消息

要禁用以前为特定内核源代码文件或内核模块启用的调试消息,请运行带有 -p 选项的 echo 命令。例如:

# echo "file FILE_NAME.c -p" > /sys/kernel/debug/dynamic_debug/control
# echo "module MODULE_NAME -p" > /sys/kernel/debug/dynamic_debug/control

有关动态调试及其用例的详细信息,请参见其官方文档

8.4 查看动态调试消息

您可以运行 dmesg 并通过 grep 过滤输出,来查看根据启用的配置生成的动态调试消息。例如:

# dmesg | grep -i "FILE_NAME.c"

或者,要在系统消息生成时持续监控系统消息,可以使用带有 -f 选项的 tail 命令:

# tail -f /var/log/messages