Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9207227
  • 博文数量: 1728
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19870
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1728)

文章存档

2024年(4)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: LINUX

2010-10-22 11:11:59

  1. 内核代码错误难以重现。 因为他们会牵连整个系统和他们一起失效,从而破坏了大量可以用来追踪错误的证据。
  2. 内核中的调试选项都集成在“Kernel hacking” 菜单。
    • CONFIG_DEBUG_KERNEL
      总开关,使得其他的调试选项可用
    • CONFIG_DEBUG_SLAB
      内存分配函数的检查选项,用以检测内存覆盖和遗漏初始化错误。被分配的每个字节在递交给调用者之前都设成0xa5,释放时被设成0x6b, 这样在OOPS的错误中就可以明确是否是此类错误。 同时此选项还会在内存对象的前后放置特别的守护值,如果这些值被改动则说明存在内存覆盖的现象,内核会给与提示。
    • CONFIG_DEBUG_SPINLOCK
      捕捉自旋锁操作的异常, 如未初始化和2次解锁
    • CONFIG_DEBUG_SPINLOCK_SLEEP
      激活对持有自旋锁的对象进入睡眠的检查。
    • CONFIG_INIT_DEBUG
      激活对__init / __initdata / __devinit 的代码检查。
    • CONFIG_DEBUG_INFO
      使得内核在编译时包含有完整的调试信息。 可以配置CONFIG_FRAME_POINTER,这样就可以使用gdb进行内核调试了。
    • CONFIG_MAGIC_SYSRQ
      激活 Magic SysRQ 键
    • CONFIG_DEBUG_STACKOVERFLOW
      跟踪堆栈溢出以得到一个OOPS输出。
    • CONFIG_KALLSYMS
      使得内核符号信息建立在内核中,这样OOPS才会显示出有效的信息。
    • CONFIG——DEBUG——DRIVER
      在《Device drivers> 菜单下,打开驱动核心的调试信息。可用于追踪底层的支持代码。
    • CONFIG——INPUT——EVBUG
      打开输入事件的详细日志
    • CONFIG_PROFILING
      剖析系统性能。
  3. 打印调试 printk
    1. KERN_EMERG

      用于紧急消息, 常常是那些崩溃前的消息.

      KERN_ALERT

      需要立刻动作的情形.

      KERN_CRIT

      严重情况, 常常与严重的硬件或者软件失效有关.

      KERN_ERR

      用来报告错误情况; 设备驱动常常使用 KERN_ERR 来报告硬件故障.

      KERN_WARNING

      有问题的情况的警告, 这些情况自己不会引起系统的严重问题.

      KERN_NOTICE

      正常情况, 但是仍然值得注意. 在这个级别一些安全相关的情况会报告.

      KERN_INFO

      信息型消息. 在这个级别, 很多驱动在启动时打印它们发现的硬件的信息.

      KERN_DEBUG

      用作调试消息.

      每个字串( 在宏定义扩展里 )代表一个在角括号中的整数. 整数的范围从 0 到 7, 越小的数表示越大的优先级.

    2. 一条没有指定优先级的 printk 语句缺省是 DEFAULT_MESSAGE_LOGLEVEL, 在 kernel/printk.c 里指定作为一个整数.
    3. 内核中变量 console_loglevel 默认为 DEFAULT_CONSOLE_LOGLEVEL, 可以通过sys_syslog 这个系统调用进行修改,也可以通过klogd的命令行参数 -c 设定。
    4. 当printk指定的优先级小于console_loglevel时,消息才会投递到控制台。
    5. 当系统中运行有klogd + syslogd 时, 内核消息被追加到/var/log/messages。
    6. 当系统没有klogd时,需要读/proc/kmsg(或用命令dmesg)来获取消息。
    7. 通过/proc/sys/kernel/printk 读写控制台记录级别。 分别为:当前记录级别/没有明确记录级别的缺省级别/允许的最小记录级别/启动时缺省记录级别。 要把所有内核消息出现在控制台,通过命令 #echo 8 > /proc/sys/kernel/printk
阅读(2657) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~