zoukankan      html  css  js  c++  java
  • 第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。

  • 相关阅读:
    上机课前准备
    C# 跨线程访问控件的解决方法
    C# 异步和多线程的区别
    C# BeginInvoke和EndInvoke方法
    C# 委托的回调机制
    C# 什么是委托
    C# WebBrowser的控件使用
    C# 解决WebBrowser.DocumentCompleted事件的多次调用
    平台调用数据类型
    C# 创建快捷方式
  • 原文地址:https://www.cnblogs.com/20135314ZHU/p/5344893.html
Copyright © 2011-2022 走看看