「技术干货」Linux内核常用调试方法
💡
原文中文,约16000字,阅读约需39分钟。
📝
内容提要
开发内核比用户空间开发更难,主要是因为调试内核的挑战。内核错误常导致系统崩溃,难以捕捉错误状态。深入理解内核是调试成功的关键。调试配置选项包括编写驱动程序、配置内核特性等。调试工具包括原子操作、BUG()和BUG_ON()、WARN()和WARN_ON()、dump_stack()等。内存调试工具包括MEMWATCH、YAMD、Electric Fence等。kdump是一种基于kexec的内核崩溃转储机制,可高可靠地捕获内核转储。
🎯
关键要点
- 开发内核比用户空间开发更难,调试内核的挑战主要导致系统崩溃,难以捕捉错误状态。
- 深入理解内核是调试成功的关键,调试前需确定存在的bug并记录内核版本。
- 内核中的bug多种多样,产生原因复杂,调试需要深入了解内核代码。
- 内核调试配置选项包括编写驱动程序和配置内核特性,调试功能通常在发行版中被禁用。
- 调试工具包括原子操作计数器、BUG()、WARN()、dump_stack()等。
- 内存调试工具如MEMWATCH、YAMD、Electric Fence等可用于检测内存错误。
- kdump是基于kexec的内核崩溃转储机制,能够高可靠地捕获内核转储。
- kdump需要两个内核:生产内核和捕获内核,捕获内核在生产内核崩溃时启动。
- 配置kdump需要设置内核引导参数和kdump配置文件,启动kdump服务后需重启机器。
- 使用kexec加载转储捕获内核,系统崩溃后会生成vmcore文件用于分析。
➡️