第18章读书笔记

18章调试

调试工作艰难是内核级开发区别于用户级开发的一个显著特点。

18.1 准备开始

内核调试往往是一个令人饶头不已的漫长过程。

1.一个BUG

2.一个藏匿BUG的内核版本

3.相关内核代码的知识和运气

18.2内核中的BUG

内核中的bug多种多样。

内核听起来很难,但事实上Linux内核与其他大型的软件项目也没有什么太大的不同。

18.3通过打印来调试

内核提供的打印函数printk()和C库提供的printf()函数功能几乎不同。

18.3.1健壮性

除非在启动过程的初期就要在终端输出

否则

认为printk在什么情况下都能工作

18.3.2日志等级

18.3.3记录缓冲区

优点:

健壮性:在中断上下文中也可以方便的使用。

简单性:使记录维护起来更容易。

缺点:
可能会丢失消息。

18.3.4.syslogd和klogd

(1)klogd
既可以从/proc/kmsg文件中,也可以通过syslog()系统调用读取这些消息。
默认是/proc方式。
两种情况klogd都会阻塞,知道有新的内核消息可供读出,唤醒之后默认处理是将消息传给syslogd。
可以通过-c标志来改变终端的记录等级

(2)syslogd
将它接收到的所有消息添加到一个文件中,默认是/var/log/messages。

 

posted on 2016-04-01 14:30  20135314朱恒志  阅读(187)  评论(0编辑  收藏  举报