第4章调试技术要点.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
内核中的调试支持 内核开发者建立了许多用于支持调试的功能,以方便调试,但这些功能会导致性能下降,发行版自带内核中往往关闭了这些功能 内核开发者需要这些功能,应该打开这些调试功能 重新配置、编译、安装内核 Kernel hacking菜单中有如下选项 CONFIG_DEBUG_KERNEL 调试选项总开关,关时全关,开时并不打开下级子开关 CONFIG_DEBUG_SLAB 开启内存分配函数中的类型检查,可以检测内存溢出及忘记初始化错误 内核中的调试支持 CONFIG_DEBUG_PAGEALLOC 该选项大降速度,但可定位特定内存损坏错误所在位置 CONFIG_DEBUG_SPINLOCK 内核将捕获未初始化自旋锁及两次解开同一锁等错误 CONFIG_DEBUG_SPINLOCK_SLEEP 检查拥有自旋锁时的休眠企图 CONFIG_INIT_DEBUG 用于初始化完成后对用于初始化的内存空间的访问检查 CONFIG_DEBUG_INFO 使内核的构造包含完整的调试信息,gdb需要 内核中的调试支持 CONFIG_MAGIC_SYSRQ 打开“SYsRq魔法”按键 CONFIG_DEBUG_STACKOVERFLOW CONFIG_DEBUG_STACK_USAGE 帮助跟踪内核栈溢出问题,前者在内核中增加明确有溢出检查,后者让内核监视栈的使用, 并通过SYsRq按键输出一些统计信息 CONFIG_KALLSYMS 出现在General setup/Standard features菜单中 内核中包含用于调试上下文的符号信息 内核中的调试支持 CONFIG_IKCONFIG CONFIG_IKCONFIG_PROC 出现在General setup菜单中 让完整的内核配置状态包含到内核中,并可通过/proc访问 CONFIG_ACPI_DEBUG 出现在Power management/ACPI菜单中 打开ACPI(Advanced Configuration and Power Interface)中的详细调试信息,若疑遇到问题与ACPI相关时用 CONFIG_DEBUG_DRIVER 出现在Device drivers菜单中 打开驱动程序核心中的调试信息,可以帮助跟踪底层支持代码中的问题 内核中的调试支持 CONFIG_SCSI_CONSTANTS 出现在Device drivers/SCSI device support菜单中 打开详细的SCSI错误消息,开发SCSI驱动时可用 CONFIG_INPUT_EVBUG 出现在Device drivers/Input device support菜单中 打开对输入事件的详细记录,开发输入设备驱动时可用 CONFIG_PROFILING 出现在Profiling support菜单中 用于系统性能的调节,但对跟踪内核挂起及相关问题也有帮助 通过打印调试 Printk是内核调试中最简单有效的工具,通过在内核代码的某些关键地方放置一条printk语句,打印一些信息,即可知道运行代码的某些行为,例: printk(KERN_CRIT Im trashed; giving up on %p\n, ptr); Printk的使用需要包含头文件linux/kernel.h 只有在消息优先级高于控制台优先级时,信息才能出现在终端上 控制台日志级别console_loglevel的初始值为DEFAULT_CONSOLE_LOGLEVE,可通过sys_syslog系统调用修改,也可通过文本文件/proc/sys/kernel/printk修改 通过打印调试 例 如下指令将控制台日志级别修改为8 # echo 8 /proc/sys/kernel/printk 下表为消息日志级别,数字越小,优先级越高 日志级别 描述 KERN_EMERG 0 紧急事件消息 KERN_ALERT 1 用于需要立即采取动作的情况 KERN_CRIT 2 临界状态,通常涉及严重的硬件或软件操作失败 KERN_ERR 3 用于报告错误状态 KERN_WARNING 4 对可能出现问题的情况进行警告 KERN_NOTICE 5 有必要进行提示的情形 KERN_INFO 6 提示性信息 KERN_DEBUG 7 用于调试信息 通过打印调试 未指定消息优先级的 printk 语句缺省优先级是 DEFAULT_MESSAGE_LOGLEVEL, 在 ke

文档评论(0)

5201394 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档